求排列的逆序数<归并><C++>
来源:互联网 发布:文都医考app软件下载 编辑:程序博客网 时间:2024/05/28 09:33
程序
#include<cstdio>using namespace std;void gb_b(int p[],int a[],int i,int j,long long &ans){ int e=(i+j)/2+1,q=i,w=0; do{ if(a[q]>a[e]) p[w++]=a[e++]; else if(a[q]==a[e]) p[w++]=a[q++],p[w++]=a[e++],ans+=e-(i+j)/2-2; else p[w++]=a[q++],ans+=e-(i+j)/2-1; }while(q<=(i+j)/2&&e<=j); if(q<=(i+j)/2) for(int k=q;k<=(i+j)/2;k++) p[w++]=a[k],ans+=e-(i+j)/2-1; if(e<=j) for(int k=e;k<=j;k++) p[w++]=a[k]; w=0; for(int k=i;k<=j;k++) a[k]=p[w++];}void gb_g(int p[],int a[],int i,int j,long long &ans){ if(j-i==0) return; gb_g(p,a,i,(i+j)/2,ans); gb_g(p,a,(i+j)/2+1,j,ans); gb_b(p,a,i,j,ans);}int main(){ long long ans=0; int n; scanf("%d",&n); int a[n],p[n]; for(int i=0;i<=n-1;i++) scanf("%d",&a[i]); gb_g(p,a,0,n-1,ans); printf("%lld",ans); return 0;}
0 0
- 求排列的逆序数<归并><C++>
- |NOIOJ|二分归并|7622:求排列的逆序数
- 分治之归并排序 求排列的逆序数
- 递归算法(归并排序):求排列的逆序数
- 求排列的逆序数
- 求排列的逆序数
- 求排列的逆序数
- 求排列的逆序数
- 求排列的逆序数
- 归并求逆序数
- 归并求逆序数
- 【MOOC】【分治】4.求排列的逆序数——归并排序的应用
- 求逆序数----归并排序的实质
- 归并排序的同时求逆序数
- 百练 求排列的逆序数
- 7622:求排列的逆序数
- 分治之求排列的逆序数
- java实现求排列的逆序数
- git使用之技巧
- 【团】关于团队管理的若干思考
- HDU 5510 Bazinga(KMP)——2015ACM/ICPC亚洲区沈阳站
- Android 多分辨率机器适配
- xcode普通编程读取txt文件
- 求排列的逆序数<归并><C++>
- 腾讯游戏大数据应用
- 查询30天内的内容
- iOS面试题
- cocos2dx一路走来之<vs2013使用中遇到的问题>
- iOS面试题
- framework层 自定义按键事件转换
- 第二期项目订房网错误分析
- 动态链接库(DLL)总结---解决名称粉碎问题(3)