172210704111-陈国佳总结《2017年12月15日》【连续066天】
标题:求排列的逆序数的尝试;
内容:
尝试通过分治解决此题:
#include<iostream>
#include<algorithm>
using namespace std;
void Merge(int a[],int s,int m,int e,long long&NUM)
{
sort(a+s,a+m+1,greater<int>());
sort(a+m+1,a+e+1,greater<int>());
int p1=s,p2=m+1;
while(p1<=m &&p2<=e){
if(a[p1]<=a[p2])++p2;
else if(a[p1]>a[p2]){
for(int i=p2;i<=e;i++){
NUM++;
}
p1++;
}
}
}
long long MergeCount(int a[],int s,int e,long long&NUM)
{
if(s<e){
int m=s+(e-s)/2;
MergeCount(a,s,m,NUM);
MergeCount(a,m+1,e,NUM);
Merge(a,s,m,e,NUM);
}
return NUM;
}
int main()
{
int n;
long long NUM=0;
cin>>n;
int a[n];
for(int i=0;i<n;i++){
cin>>a[i];
}
int size=sizeof(a)/sizeof(int);
cout<<MergeCount(a,0,size-1,NUM)<<endl;
return 0;
}
显示超时,暂时没有好的解决办法。
明日计划:复习;