4754697_tle.cpp

来自「部分PKU上的源码」· C++ 代码 · 共 52 行

CPP
52
字号
#include<iostream>
using namespace std;
__int64 x[500005];
int all;
void merge(int b,int e,int mid)
{
	int ll=mid-b+1;
	int rl=e-mid;
	__int64 l[500005];
	__int64 r[500005];
	int i,j,k;
	for(i=0,k=b;k<=mid;i++,k++) l[i]=x[k];
	for(i=0,k=mid+1;k<=e;i++,k++) r[i]=x[k];
	for(k=b,i=0,j=0;k<=e;k++)
	{
		if(i==ll) x[k]=r[j++];
		else
			if(j==rl) x[k]=l[i++];
			else
				if(l[i]<=r[j]) x[k]=l[i++];
				else{
					x[k]=r[j++];all+=ll-i;
				}
	}
}
void mergesort(int b,int e)
{
	if(b>=e) return ;
	else
	{
		int mid=(b+e)/2;
		mergesort(b,mid);
		mergesort(mid+1,e);
		merge(b,e,mid);
	}
}
int main()
{
	int n;
	while(1)
	{
		scanf("%d",&n);
		if(n==0) return 0;
		int i;
		all=0;
		for(i=0;i<n;i++) scanf("%i64d",x+i);
		mergesort(0,n-1);
		cout<<all<<endl;
	}
	return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?