Median

http://poj.org/problem?id=3579

Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 11225   Accepted: 4016

Description

Given N numbers, X1X2, ... , 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 if m,the amount of the differences, is even. For example, you have to find the third smallest one in the case of = 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, representing X1X2, ... , XN, ( X≤ 1,000,000,000  3 ≤ N ≤ 1,00,000 )

Output

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

Sample Input

4
1 3 2 4
3
1 10 2

Sample Output

1
8

Source

POJ Founder Monthly Contest – 2008.04.13, Lei Tao

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<string>
 4 #include<map>
 5 #include<vector>
 6 #include<cmath>
 7 #include<string.h>
 8 #include<stdlib.h>
 9 #include<stack>
10 #include<queue>
11 #include<cstdio>
12 #define ll long long
13 const long long MOD=1000000007;
14 #define maxn 100005
15 using namespace std;
16
17 int n;
18 int m;
19 int a[maxn];
20
21 bool Check(int mid){
22     int sum=0;
23     int p;
24     for(int i=1;i<=n;i++){
25         p=upper_bound(a+1,a+n+1,a[i]+mid)-a;
26         sum+=p-i-1;//排除a[i]之前的那些元素,共有i+1;
27     }
28     if(sum>=m){
29         return true;
30     }
31     return false;
32 }
33
34 int main(){
35     while(~scanf("%d",&n)){
36         m=n*(n-1)/2;
37         m=(m+1)/2;
38         for(int i=1;i<=n;i++){
39             scanf("%d",&a[i]);
40         }
41         sort(a+1,a+n+1);
42         ll L=0,R=1000000000,mid;
43         while(L<=R){
44             mid=L+R>>1;
45             if(Check(mid)){
46                 R=mid-1;
47             }
48             else{
49                 L=mid+1;
50             }
51         }
52         printf("%d\n",L);
53     }
54
55 }

View Code

转载于:https://www.cnblogs.com/Fighting-sh/p/10054652.html

Median(二分+二分)相关推荐

  1. 【hiho】38 二分·二分答案【二分答案】

    传送门:二分·二分答案 分析 因为 两个相邻战略点之间可能不止一条航线,所以不能够用邻接矩阵来存储图. 用邻接表来存储,用数组模拟. 二分答案就是二分枚举答案,验证答案的正确性,每次验证可将范围缩小一 ...

  2. Bridging signals(二分 二分+stl dp)

    欢迎参加--每周六晚的BestCoder(有米!) Bridging signals Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 6 ...

  3. hdu2413 二分+二分匹配

    题意:       地球和外星球大战,地球有n个飞船,外星球有m个飞船,每个飞船有自己的其实战舰和战舰增长率,星球于星球之间有距离,问你最少多少年地球可以打败外星球,每个星球最多只能和一个星球对战.. ...

  4. 【HIHOCODER 1133】 二分·二分查找之k小数

    描述 在上一回里我们知道Nettle在玩<艦これ>,Nettle的镇守府有很多船位,但船位再多也是有限的.Nettle通过捞船又出了一艘稀有的船,但是已有的N(1≤N≤1,000,000) ...

  5. bzoj 4443: [Scoi2015]小凸玩矩阵(二分+二分匹配)

    4443: [Scoi2015]小凸玩矩阵 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 1002  Solved: 505 [Submit][St ...

  6. 牛客 试卷: 浩鲸科技2019校招算法类笔试题 经典二分 二分答案

    珂珂喜欢吃香蕉.这里有 N 堆香蕉,第 i 堆中有 piles[i] 根香蕉.警卫已经离开了,将在 H 小时后回来. 珂珂可以决定她吃香蕉的速度 K (单位:根/小时).每个小时,她将会选择一堆香蕉, ...

  7. POJ 2456 Aggressive cows(二分答案)

    Aggressive cows Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 22674 Accepted: 10636 Des ...

  8. ACM入门之【二分】

    二分分为: 整数二分 浮点数二分 二分可以解决的问题:如果它左边的区间不满足条件,右边区间都满足条件. 那么就可以用二分O(log2n)的时间复杂度解决问题. 模板 bool check(int x) ...

  9. 90%的程序员都写错的算法-二分查找万能模版

    新的角度看二分 二分就是将数组分为两段 因此,问题的最终目标是找出蓝红边界 朴素算法 红色指针一开始指向最右超出范围处,随后不断向左移动,直到找到蓝红边界:或者蓝色指针- 时间复杂度O(n)O(n)O ...

最新文章

  1. 第2关:计算二叉树的深度和节点个数
  2. 2021年春季学期-信号与系统-第十一次作业参考答案-第一小题
  3. densenet tensorflow 中文汉字手写识别
  4. mysql实用管理器添加外键_MySQL 添加外键
  5. highcharts 24小时显示数据,显示00:00格式的数据
  6. Swift 5 从Model, Struct或Class转Dictionary
  7. SAS Planet下载卫星地图
  8. Windows下制作DOS启动U盘的方法
  9. windbg分析BSOD dump文件实战
  10. 古体字与简体字对照表_简体字与繁体字对照表大全.pdf
  11. 多示例学习 (multi-instance learning, MIL)学习路线 (分类)
  12. 微型计算机如今的cpu,第二章 微型计算机硬件组成1
  13. linux route 刷新_linux route命令反应很慢是什么原因?
  14. 安全性-身份验证和授权(一)之Principal
  15. 毛头小子初学Java
  16. mcs微型计算机,CSY-Ⅱ/MCS-Ⅱ/MCS-2智能汽机微机测速仪
  17. 解决win10 VirtualBox无法启动(VERR_NEM_VM_CREATE_FAILED)/VMware Workstation 与 Device/Credential Guard 不兼容
  18. 文件格式批量转换(dos to unix)-自动转换^M符号
  19. 20180507-A · Global Coffee Chains · ggplot2 usmap geom_map geom_point 地图 热图 美国地图 · R 语言数据可视化 案例 源码
  20. linux shell的for循环语法是怎样的?

热门文章

  1. 编写一个java打印心程序_java – ?同时打印心脏符号
  2. 图像太宽无法输出请裁剪图像或降低分辨率然后重试_真·无监督!延世大学提出图像到图像无监督模型,实验结果超SOTA...
  3. Apache工具包方法——Hex.encodeHexString(byte[] data)源码浅析
  4. 血型算法php,血型排行榜!(真的很准)
  5. linux中cooy命令_Linux:CentOS 7中常用的基础命令
  6. ROS + OpenCV
  7. mysql in 多个字段_MySQL如何同时自增自减多个字段
  8. HTML+CSS+JS实现 ❤️爱心文字3D旋转动画特效❤️
  9. HTML+CSS+JS实现 ❤️发光的线条爱心形状动画特效❤️
  10. 使用Lambda表达式遍历Iterator迭代器