国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

POJ 3579 Median(2次二分)

2019-11-10 19:18:52
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

Given N numbers, X1,X2, ... , XN, let us calculate the difference of every pair of numbers: ∣Xi- Xj∣ (1 ≤ i j N). We can get C(N,2) differences through this work, and now your task is to find the median of the differences as quickly as you can!

Note in this PRoblem, the median is defined as the (m/2)-th  smallest number ifm,the amount of the differences, is even. For example, you have to find the third smallest one in the case ofm = 6.

Input

The input consists of several test cases.In each test case, N will be given in the first line. Then N numbers are given, representingX1, X2, ... ,XN, ( Xi≤ 1,000,000,000  3 ≤ N ≤ 1,00,000 )

Output

For each test case, output the median in a separate line.

Sample Input
41 3 2 431 10 2Sample Output
18

  思路:本題直接使用暴力法,時(shí)間復(fù)雜度約為n^2,超時(shí),所以采用二分法。

  先把差值分出來(lái),再用二分法驗(yàn)證差值是否符合要求。

#include<algorithm>#include<cstdio>#include<cstdlib>using namespace std;int n,m;int str[100005];int judge(int mid){   int cnt=0;    for(int i=0;i<n;i++)    {        cnt+=n-(lower_bound(str,str+n,str[i]+mid)-str);//C++中STL的查找函數(shù)
    }    return cnt>m?1:0;}int main(){   //freopen("e://in.txt","r",stdin);    while(scanf("%d",&n)==1)    {     m=n*(n-1)/4;         for(int i=0;i<n;i++)          scanf("%d",&str[i]);          sort(str,str+n);          int left=0,right=str[n-1]+str[0],mid;          while(left<=right)          {              mid=(left+right)/2;              if(judge(mid))                left=mid+1;              else                right=mid-1;          }          printf("%d/n",left-1);    }    return 0;}

總結(jié):lower_bound函數(shù)的引用

 


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 西城区| 井陉县| 宾阳县| 宿州市| 香河县| 出国| 湘阴县| 北海市| 宜兰市| 明光市| 临武县| 衡山县| 炉霍县| 慈利县| 侯马市| 攀枝花市| 福贡县| 溧阳市| 若羌县| 胶南市| 嘉定区| 安顺市| 三门县| 宾阳县| 酒泉市| 齐齐哈尔市| 凤凰县| 韶关市| 巩义市| 苏尼特右旗| 印江| 赤城县| 论坛| 衡南县| 金华市| 额敏县| 宽城| 东丽区| 顺平县| 佳木斯市| 禹城市|