RE,50pts,#5~#10,求大佬解救
  • 板块P1908 逆序对
  • 楼主Fallen67
  • 当前回复2
  • 已保存回复2
  • 发布时间2025/8/3 15:37
  • 上次更新2025/8/3 20:34:03
查看原帖
RE,50pts,#5~#10,求大佬解救
1110839
Fallen67楼主2025/8/3 15:37
#include<cstdio>
#define N 100005
using namespace std;
int n, a[N], b[N];
long long inversion_count = 0;

void srt(int l, int r) {
    if (l == r) return ;
    int mid = (l + r) / 2;
    srt(l, mid);
    srt(mid + 1, r);
    int li = l, ri = mid + 1, p = l;
    while (1) {
        if (li > mid) {
            for (; ri <= r; ri++) b[p++] = a[ri];
            break;
        } else if (ri > r) {
            for (; li <= mid; li++) b[p++] = a[li];
            break;
        }
        if (a[li] <= a[ri]) {
            b[p++] = a[li++];
        } else {
            b[p++] = a[ri++];
            inversion_count += (mid - li + 1);
        }
    }
    for (int i = l; i <= r; i++) a[i] = b[i];
    return ;
}

int main() {
    scanf("%d", &n);
    for (int i = 1; i <= n; i++) {
        scanf("%d", &a[i]);
    }
    inversion_count = 0;
    srt(1, n);
    printf("%lld",inversion_count);
    return 0;
}
    
2025/8/3 15:37
加载中...