poj35798(组合中位数二分查找)
来源:互联网 发布:逆向建模软件 编辑:程序博客网 时间:2024/06/11 21:37
题意:给n个数,求出C(n,2)个|Ci-Cj|数中的的中位数。
解法:二分枚举结果。总复杂度NlogM,M为数的大小范围。
代码:
/***************************************************** author:xiefubao*******************************************************/#pragma comment(linker, "/STACK:102400000,102400000")#include <iostream>#include <cstring>#include <cstdlib>#include <cstdio>#include <queue>#include <vector>#include <algorithm>#include <cmath>#include <map>#include <set>#include <stack>#include <string.h>using namespace std;#define eps 1e-8typedef long long LL;int n;int num[100010];bool OK(int middle){ LL ans=0; for(int i=0;i<n;i++) ans+=max(0,num+n-lower_bound(num,num+n,num[i]+middle)); return ans>LL(n)*LL(n-1)/2-(LL(n)*LL(n-1)/2+1)/2;}int main(){ while(scanf("%d",&n)==1) { for(int i=0;i<n;i++) scanf("%d",num+i); sort(num,num+n); int left=0;int right=num[n-1]-num[0]; //cout<<OK(2)<<endl; while(left<=right) { int middle=(left+right)/2; if(OK(middle)) left=middle+1; else right=middle-1; } cout<<left-1<<'\n'; } return 0;}
0 0
- poj35798(组合中位数二分查找)
- 二分查找:联合中位数
- 查找中位数
- 考试题 树状数组查找以比x大的数作为中位数的个数+二分中位数
- 递增和二分组合的查找法
- [LeetCode]Median of Two Sorted Arrays 二分查找两个有序数组的第k数(中位数)
- 查找第k小(中位数)
- 查找中位数(java 快速排序)
- 折半查找(二分查找)
- 二分查找(折半查找)
- 二分查找(折半查找)
- 折半查找(二分查找)
- 折半查找(二分查找)
- 二分查找(折半查找)
- 折半查找(二分查找)
- 查找(一)二分查找
- 二分查找(折半查找)
- 二分查找(折半查找)
- ORACLE日期函数一
- 矩形A + B 2524
- 面向对象的编程之__init__方法
- C++中类的组合
- 嵌入式人才的发展方向,给从事嵌入式开发的同学指路
- poj35798(组合中位数二分查找)
- Ubuntu 下的一些软件安装
- proc多线程访问ORACLE数据库
- 回型矩阵
- HTML DOM - 事件
- linux su和sudo命令的区别
- stl中的complex
- uva 12223 - Moving to Nuremberg(树形dp)
- Struts 2.x jar包略解