1 条题解
-
0
思路
允许重复值且只计严格大于,N上限10万须64位答案,区别排列逆序数。
参考程序(C++11)
#include <bits/stdc++.h> using namespace std; long long f(vector<long long>&a,int l,int h){if(h-l<2)return 0;int m=(l+h)/2;long long ans=f(a,l,m)+f(a,m,h);vector<long long>b;int i=l,j=m;while(i<m||j<h){if(j==h||(i<m&&a[i]<=a[j]))b.push_back(a[i++]);else{b.push_back(a[j++]);ans+=m-i;}}copy(b.begin(),b.end(),a.begin()+l);return ans;}int main(){int n;cin>>n;vector<long long>a(n);for(auto &x:a)cin>>x;cout<<f(a,0,n)<<'\n';}
- 1