代码展示
#include<iostream>
#include<vector>
using namespace std;
typedef long long LL;
const int N = 100010;
int n;
int a[N], backup[N];
LL res;//处理大量数据的常用框架
LL merge_sort(int l, int r) {
if (l >= r)return 0;
int mid = (l + r) >> 1;//>> 1 表示将二进制数向右移动 1 位
//相当于将数值除以 2 并向下取整
res = (LL)merge_sort(l, mid) + merge_sort(mid + 1, r);
int i = l, j = mid + 1, k = 0;
while (i <= mid && j <= r) {
if (a[i] <= a[j])backup[k++] = a[i++];
else {
backup[k++] = a[j++];
res += mid - i + 1;
}
}
while (i <= mid)backup[k++] = a[i++];
while (j <= r)backup[k++] = a[j++];
for (int i = l, j = 0; i <= r; i++, j++)a[i] = backup[j];
return res;
}
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%d", &a[i]);
}
printf("%lld\n", merge_sort(1, n));
return 0;
}
代码逻辑解析
1. 整体思路
-
目标

最低0.47元/天 解锁文章
372

被折叠的 条评论
为什么被折叠?



