066day(求排列的逆序数的尝试)

来源:互联网 发布:小麦淘商城 知乎 编辑:程序博客网 时间:2024/05/19 17:56

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;
}


显示超时,暂时没有好的解决办法。


明日计划:复习;

原创粉丝点击