为何不对
查看原帖
为何不对
1353273
OvOhappy楼主2024/10/13 10:28
#include<bits/stdc++.h>
using namespace std;
int a[300005],b[300005],n;
long long ans;
void gb(int l,int r){
	if(l >= r)return ;
	int mid = (l + r) / 2;
	gb(l,mid);
	gb(mid+1,r);
	int x = l;
	int y = mid + 1;
	int k = l;
	while(x <= mid && y <= r){
		if(a[x] >= a[y]){
			b[k++] = a[x++];
		}
		else {
			ans += mid - x + 1;
			b[k++] = a[y++];
			
		}
	}
	while(x <= mid){
		b[k++] = a[x++];
	}
	while(y <= r){
		b[k++] = a[y++];
	}
	for(int i = l;i <= r;i ++){
		a[i] = b[i];
	}
}
int main(){
	int n;
	cin >> n;
	for(int i = 1;i <= n;i ++){
		cin >> a[i];
	}
	gb(1,n);
	cout << ans;
}
2024/10/13 10:28
加载中...