归并算法实现求解逆序对【模板】
2015-08-05 11:12
92 查看
已用此模板过掉了好几题。
#include<stdio.h> #define LL long long //以后可以考虑这样写 简洁 int n,i,a[500010], b[500010]; //需要开辟两个数组 LL count(int l,int r)//统计[l ,r]的逆序对数 { LL s=0;//初始化 int mid=(l+r)/2, i=l, j=mid+1, k=l; //printf("%d \n", mid ); if (l<mid) s+=count(l,mid);//计算累加左区间的逆序对 if (mid+1<r) s+=count(mid+1,r);//计算累加右区间的逆序对 while( i<=mid || j<=r ) { while ( i<=mid && (j>r || a[i]<=a[j]) ){ //printf("%d < %d", a[i], a[j] ); //左边理应小于右边(左边等级低 右边等级高) b[k++]=a[i++]; } while ( j<=r && (i>mid || a[j]<a[i]) ) { //右边的大于左边的进行计数 // printf(" %d-<-%d ", a[j], a[i] ); b[k++]=a[j++]; s+=mid-i+1; } } for(i=l;i<=r;i++) a[i]=b[i]; return s; } int main() { while(scanf("%d",&n)!=EOF) { for (i=0; i<n; i++) scanf("%d", &a[i]); printf("%lld\n", count(0,n-1)); } return 0; }
相关文章推荐
- *HDU 5348 - MZL's endless loop(搜索)
- 南邮 OJ 1218 标准2维表问题
- ViewPager实现一屏多页 扇形翻页效果
- 从零开始学Python
- MyEclipse启动Tomcat服务器时老是跳到Debug调试上
- mantis报表中文乱码解决方法
- 一、查询地图数据
- 服务器搭建以及vim配置过程
- C/C++是怎么通过宏定义来判断操作系统的
- 第三方支付熟悉
- (FFOS Gecko & Gaia) OTA - 处理check结果
- 集训第四周(高效算法设计)A题 Ultra-QuickSort
- 区间DP UVA 11584 Partitioning by Palindromes
- Context-----Activity,Application之间的交流使者
- Windows10占用80端口,Apache无法启动的解决办法
- 配置ISCSI
- 南邮 OJ 1217 双色Hanoi塔问题
- 回调函数中JSON对象的解析方式
- iOS开发之获取沙盒路径
- 关于scheme的缩写