归并排序0分求助
查看原帖
归并排序0分求助
490676
_llltd14_楼主2021/6/12 12:10
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 5e5 + 50;
long a[MAXN], b[MAXN]; 
long long ans; 
void merge_sort(int l, int r){
    if(l == r) return;
	int mid = (l + r) >> 1;
	merge_sort(l, mid);
	merge_sort(mid + 1, r);
	int i = l, j = mid + 1, cnt = l;
	while(i <= mid && j <= r){
		if(a[i] < a[j]) b[cnt++] = a[i++];
		else b[cnt++] = a[j++], ans = ans - cnt + j;
	}
	while(i <= mid) b[cnt++] = a[i++];
	while(j <= r) b[cnt++] = a[j++], ans = ans - cnt + j;
	for(int p = l; p <= r; ++p) a[p]=b[p];
}

int read(){
    int ans = 0;
	char c = getchar();
    while(c < '0' || c > '9') c = getchar();
    while(c >= '0' && c <= '9') ans = (ans << 3) + (ans << 1) + (c ^ '0'),c = getchar();
    return ans;
}
int main(){
	int n = read();
    for(int i = 1; i <= n; ++i) a[i] = read();
    merge_sort(1, n);
    cout << ans;
    return 0;
}
2021/6/12 12:10
加载中...