萌新刚学oi求助
查看原帖
萌新刚学oi求助
218223
chenxsir楼主2020/7/4 13:45
#include<cstdio>
using namespace std;
const int maxn=500050;
long long n,cnt;
long long a[maxn],b[maxn];
void merge(int l,int r);
int main()
{
	while (scanf("%d", &n) != EOF && n > 0)
	{
	
		for(int i=1; i<=n; i++) scanf("%lld", a + i);;
		merge(1,n);
		printf("%lld\n", cnt);
	}
		return 0;
}
void merge(int l, int r)
{
	int mid=(l+r)>>1;
	int i=l,j=mid+1;
	if(l==r) return;
	merge(l,mid);
	merge(mid+1,r);
	for(int k=l; k<=r; k++)
	if(j > r|| i<=mid && a[i]<=a[j]) b[k]=a[i++];
	else b[k]=a[j++], cnt+= mid-i+1;
	for(int k=l; k<=r; k++)a[k]=b[k];
	return;
}
2020/7/4 13:45
加载中...