归并方法求逆序对(洛谷1908逆序对)
来源:互联网 发布:广州乐乎城市青年社区 编辑:程序博客网 时间:2024/05/30 07:13
逆序对问题,给定一个序列,求逆序对的对数。
参考刘汝佳的书:由于合并操作是从小到大进行的,当右边的A[j]复制到T中,右边的比左边还没有来得及复制的数要大,在答案加上m-p即可。
#include<bits/stdc++.h>using namespace std;int A[50000],T[50000];int cnt=0;int n;void merge_sort(int x,int y)//[x,y){if(y-x>1){int m=x+(y-x)/2;//注意这种写法 int p=x,q=m,i=x;merge_sort(x,m);merge_sort(m,y);//[x,m),[m,y)while(p<m||q<y){if(q>=y||p<m&&p<m&&A[p]<=A[q]) T[i++]=A[p++];else T[i++]=A[q++],cnt+=m-p;//每一次搜索右边的时候就相当于右边的比左边还没有来得及复制的数要大 }for(int i=x;i<y;i++)A[i]=T[i];//复制回A数组当中去 }}//归并排序 O(nlog2n) O(n) 稳定 较复杂int main(){cin>>n;for(int i=1;i<=n;i++)cin>>A[i];merge_sort(1,n+1);cout<<cnt<<endl;}
阅读全文
0 0
- 归并方法求逆序对(洛谷1908逆序对)
- 归并求逆序对
- 归并求逆序对
- 求逆序数对(归并排序)
- 求逆序对 (用归并) nlogn
- 求逆序对(归并排序)
- 归并排序求逆序对
- poj1007 归并求逆序对
- 归并排序求逆序对
- 归并排序求逆序对~~~
- 归并求逆序对【模板】
- 归并排序求逆序对
- 归并排序求逆序对
- 归并排序求逆序对
- 归并排序求逆序对
- 归并排序求逆序对
- 归并排序求逆序对
- 归并排序求逆序对
- 字符串转换成整数+不用加减乘除做加法
- 组合数杨辉三角(Irrelevant Elements uva1635)
- 堆or优先队列(洛谷1631 序列合并)
- Vue.js中的图片引用路径
- 简单的分治模板
- 归并方法求逆序对(洛谷1908逆序对)
- 多叉树转二叉树+树形dp(codevs 1746 贪吃的九头龙 2002noi)
- Unity引擎学习
- 离散化的基本操作
- 关于循环输出后怎么控制隐藏显示
- 最小点对分治法(洛谷1257)
- 简陋的dp(蒟蒻dhl的日常)
- 树形dp最大独立集(洛谷1352 没有上司的舞会)
- 离散化+线段树(CDOJ1325卿学姐与基本法)