Codevs
/* 作者:thmyl 题目:p1688 求逆序对 */ #include<iostream> using namespace std; long long n,a[1000000],tot,temp[10000000]; void sor(int l,int r) { if(l==r)return ; int mid=(l+r)/2; sor(l,mid); sor(mid+1,r); int i=l,p=l,j=mid+1; while(i<=mid&&j<=r) { if(a[i]>a[j])tot+=mid-i+1,temp[p++]=a[j++]; else temp[p++]=a[i++]; } while(i<=mid)temp[p++]=a[i++]; while(j<=r)temp[p++]=a[j++]; for(int i=l;i<=r;i++)a[i]=temp[i]; } int main() { cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; sor(1,n); cout<<tot; }
时间: 2024-10-19 15:00:46