【算法】788.逆序对的数量
- 其他
- 2025-08-25 20:03:01

题目
逆序对的数量
思路在归并排序的基础上求逆序数,如果l-mid中的数大于mid+1-r中的数,则i和i之后的所有数都是指针j所指数的逆序数。与归并算法不同的是,本题需要有返回值,返回逆序数的数量。
代码 #include<iostream> using namespace std; typedef long long ll; const int N = 100010; int n; int a[N], temp[N]; ll merge_sort(int l, int r) { if (l >= r) { return 0; } int mid = (l + r) / 2; ll sum=merge_sort(l, mid)+merge_sort(mid + 1, r); int k = 0, i = l, j = mid + 1; while (i <= mid && j <= r) { if (a[i] <= a[j]) { temp[k++] = a[i++]; } else { temp[k++] = a[j++]; sum = sum + mid - i + 1; } } while (i <= mid) { temp[k++] = a[i++]; } while (j <= r) { temp[k++] = a[j++]; } for (int i = l, j = 0;i <= r;i++, j++) { a[i] = temp[j]; } return sum; } int main() { cin >> n; for (int i = 0;i < n;i++) { cin >> a[i]; } cout << merge_sort(0, n - 1) << endl; return 0; }【算法】788.逆序对的数量由讯客互联其他栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“【算法】788.逆序对的数量”