poj 2299
终于写了个mergesort 偷懒不行啊
#include <iostream> using namespace std;
int a[500001];
int temp[500001];
__int64 sum;
void merge(int l,int m,int r)
{
int p = 0;
int i = l;
int j = m+1;
while(i<=m && j<=r)
{
if(a[i]>a[j])
{
temp[p++] = a[j++];
sum += m-i+1;
}
else
temp[p++] = a[i++];
}
while(i<=m)temp[p++] = a[i++];
while(j<=r)temp[p++] = a[j++];
for(i=0;i<p;i++)a[l+i] = temp[i];
}
void mergesort(int l,int r)
{
int m;
if(l<r)
{
m = (l+r)/2;
mergesort(l,m);
mergesort(m+1,r);
merge(l,m,r);
}
}
int main()
{
int n;
int i;
while(cin>>n && n !=0)
{
sum = 0;i=0;
while(i<n)cin>>a[i++];
mergesort(0,n-1);
cout<<sum<<endl;
}
}

浙公网安备 33010602011771号