hdu2443conter strike-算法效率优化(求“正序对”)
来源:互联网 发布:苹果手机迅雷网络异常 编辑:程序博客网 时间:2024/05/04 16:03
#include<stdio.h>#define MAX 100005int sum[MAX],tmp[MAX];_int64 ans;void merge(int l,int m,int r){int h1=l,h2=m+1,tmp_num=l,i;while(h1<=m&&h2<=r){if(sum[h2]>sum[h1]) tmp[tmp_num++]=sum[h1++],ans+=r-h2+1;//若是后面分割数组的h2位置的数大于前面h1位置的数说明是正序,由于后面的数组为有序的,所以大于h2位置的数都是满足条件的else tmp[tmp_num++]=sum[h2++];//此时说明不满足条件}while(h1<=m) tmp[tmp_num++]=sum[h1++];while(h2<=r) tmp[tmp_num++]=sum[h2++];for(i=l;i<=r;i++) sum[i]=tmp[i];}void mergesort(int l,int r){int m=(l+r)/2;if(l!=r){mergesort(l,m);//分解问题规模mergesort(m+1,r);merge(l,m,r);//治理:做两个问题归并是的排序}}int main(){ int t,n,i,a,so; scanf("%d",&t);sum[0]=0; while(t--){ scanf("%d%d",&n,&a); for(i=1;i<=n;i++){ scanf("%d",&so); sum[i]=sum[i-1]+(so-a);//当sum[i]-sum[j]>0(i>j)时代表其满足条件,即是sum[i]>sum[j](i>j),相比逆序对,求的是正序对 } ans=0;//ans为其“正序对”的个数 mergesort(0,n); printf("%I64d\n",ans); } return 0;}
0 0
- hdu2443conter strike-算法效率优化(求“正序对”)
- 对一个C++函数的效率优化(好)
- 对Listview控件的效率优化
- 提高查询效率对查询进行优化
- 对Listview控件的效率优化
- 算法讨论,求效率的问题!
- 求数组最大值优化算法
- 求素数的优化算法
- 【算法】—— str2int(正序和逆序)
- 合并算法求逆序对
- 分治求逆序对算法
- \t\t对一个C++函数的效率优化(好,转载)
- 指定误差求开平方之不同算法实现之间的效率比较(java实现)
- Kruskal算法求最小生成树 (最小堆优化)
- Prime算法求最小生成树 (最小堆优化)
- BNU 25586 Mega Inversions【树状数组求逆序数对和正序数对】
- 求最近点对(分治算法的运用)
- 算法分析:求最近点对问题(c++)
- SDWebImage使用以及缓存和本地存储的清理
- #1045 - Access denied for user 'root'@'localhost' (using password: NO)的问题
- vim ctags cscope 用法
- Linux文件搜索(其他命令)
- Android Toast
- hdu2443conter strike-算法效率优化(求“正序对”)
- poj3378 Crazy Thairs 高精度,树状数组
- 制作最小根文件系统
- bbpress 添加 featured image
- ACM国内外OJ网站大集合
- sql server 数据库存储过程
- Sqlplus连接Oracle出现中文乱码问题以及字符集的选择
- 在树莓派上搭建web服务器——基于Apache
- Timer定时器简单用法(Android中示例)