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

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


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


明日计划:复习;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值