poj 3579 Median 二分查找与lower_bound
2015-01-22 00:30
337 查看
题意:
给n个数,他们两两之间较大数减去较小数总共有n*(n-1)/2个数,要求这些数的中位数。
分析:
两次二分,第一次枚举答案,第二次判断该数是否可能成为中位数。
代码:
给n个数,他们两两之间较大数减去较小数总共有n*(n-1)/2个数,要求这些数的中位数。
分析:
两次二分,第一次枚举答案,第二次判断该数是否可能成为中位数。
代码:
//poj 3579 //sep9 #include <iostream> #include <algorithm> using namespace std; const int maxN=1e5+10; int a[maxN]; int n,m; int test(int x) { int sum=0; for(int i=0;i<n;++i) sum+=lower_bound(a+i,a+n,a[i]+x)-(a+i)-1; if(sum<=m) return 1; return 0; } int main() { while(scanf("%d",&n)==1){ for(int i=0;i<n;++i) scanf("%d",&a[i]); sort(a,a+n); int l,r,mid,ans; m=n*(n-1)/2; if(m%2==1) m/=2; else m=m/2-1; l=0,r=a[n-1]-a[0]+1;//[) while(l<r){ mid=(l+r)/2; if(test(mid)){ l=mid+1; ans=mid; }else r=mid; } printf("%d\n",ans); } return 0; }
相关文章推荐
- POJ - 3579 Median (二分 + 查找第K大)
- poj 3579 二分+lower_bound
- POJ - 3579 Median(二分搜索,查找第K大的值)
- POJ 3579 Median 查找中间值 二分
- POJ_3579_Median_(二分,查找第k大的值)
- poj 3579 Median (二分搜索之查找第k大的值)
- c++ 二分查找的函数 lower_bound & upper_bound & binary_search
- STL中的二分查找——lower_bound 、upper_bound 、binary_search
- 二分——POJ 3579 Median
- STL中的二分查找——lower_bound 、upper_bound 、binary_search
- STL之二分查找(binary_search(),lower_bound(),upper_bound() )
- lower_bound 二分查找
- STL之二分查找(binary_search(),lower_bound(),upper_bound() )
- POJ 3579 Median (查找第k大的值)
- UVA10474 Where is the Marble?(二分查找,STL-lower_bound)
- STL中的二分查找——lower_bound 、upper_bound 、binary_search
- POJ 3579 - Median(二分搜索)
- POJ---3579(Median,二分搜索)
- lower_bound()函数(二分查找)
- POj 3579 Median(二分逼近)