7.13 GPOJ 3579Median
来源:互联网 发布:淘宝新店铺怎么引流量 编辑:程序博客网 时间:2024/06/07 07:26
题意:给出N个数,对于存有每两个数的差值的序列求中位数,如果这个序列有偶数个元素,就取中间偏小的作为中位数。
思路:这题由于N数量太大,没办法直接把差值序列求出来。这么大的数据量只能二分,先把给出的数从小到大排序。二分中位数,比较的方法是在排好序的序列中统计所有差小于等于中位数的数的个数,当该数字等于(n*(n-1)/2)/2+(n*(n-1)/2)%2时即找到答案。
代码:
#include <cstdio>#include <algorithm>using namespace std;int a[100000],n,m;bool C(int k){ int cnt=0;//统计数组a内所有差小于等于k的数的数量。 for(int i=0;i<n;i++){ cnt+=upper_bound(a+i,a+n,a[i]+k)-1-(a+i); } return cnt>=m;}int main(){ while(~scanf("%d",&n)){ for(int i=0;i<n;i++) scanf("%d",&a[i]); int c=n*(n-1)/2; m=c/2+(c%2); sort(a,a+n); int l=-1,r=a[n-1]-a[0];//二分枚举中位数的大小,右闭左开 while(r-l>1){ int mid=(l+r)/2; if(C(mid)) r=mid; else l=mid; } printf("%d\n",r); } return 0;}
0 0
- 7.13 GPOJ 3579Median
- POJ-3579-Median
- Median - POJ 3579 二分
- POJ 3579 Median
- POJ 3579- Median
- POJ 3579 Median
- POJ - 3579 Median 二分
- poj-3579 Median
- POJ 3579 Median
- 【poj 3579】 Median
- POJ 3579 Median(二分)
- POJ 3579 median
- POJ 3579 Median
- Median
- Median
- Median
- median
- Median
- 网易云iframe插件测试
- ubuntu下socket通信
- c语言顺序表动态实现
- #pragma pack
- Hadoop 2.7分布式部署
- 7.13 GPOJ 3579Median
- iOS开发 - Quartz2D绘制小黄人
- 这些天对图片加载框架的思考
- C++ [] 运算符重载
- volatile的理解
- 博客书写-教师节收益
- 用glew,glfw实现opengl学习笔记5课纹理(2)
- 缓存使用总结
- UEditor删除字数统计和元素路径