1 条题解
-
0
思路
十万规模逆序统计,答案可超32位,需要nlogn路线。
参考程序(C++11)
#include <bits/stdc++.h> using namespace std; vector<int>a,b;long long solve(int l,int r){if(r-l<=1)return 0;int m=(l+r)/2;long long ans=solve(l,m)+solve(m,r);int i=l,j=m,k=l;while(i<m&&j<r){if(a[i]<=a[j])b[k++]=a[i++];else{ans+=m-i;b[k++]=a[j++];}}while(i<m)b[k++]=a[i++];while(j<r)b[k++]=a[j++];for(i=l;i<r;i++)a[i]=b[i];return ans;}int main(){int n;cin>>n;a.resize(n);b.resize(n);for(int &x:a)cin>>x;cout<<solve(0,n)<<'\n';}
- 1