博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Divide and conquer:Median(POJ 3579)
阅读量:5165 次
发布时间:2019-06-13

本文共 1214 字,大约阅读时间需要 4 分钟。

                

                

  题目大意:给你一个很大的数组,要你求两个数之间的距离的中值

  二分法常规题,一个pos位就搞定的事情

  

1 #include 
2 #include
3 #include
4 5 using namespace std; 6 typedef long long LL_INT; 7 8 static int nums[100002]; 9 bool judge(LL_INT, LL_INT,const int);10 11 int main(void)12 {13 int lb, rb, mid;14 LL_INT k, n;15 16 while (~scanf("%lld", &n))17 {18 k = n*(n - 1) / 2;19 k = k % 2 == 0 ? k / 2 : k / 2 + 1;20 21 for (int i = 0; i < n; i++)22 scanf("%d", &nums[i]);23 sort(nums, nums + n);24 lb = 0; rb = 1000000001;25 while (rb - lb > 1)26 {27 mid = (lb + rb) / 2;28 if (judge(k, n, mid)) lb = mid;29 else rb = mid;30 }31 printf("%d\n", rb);32 }33 return 0;34 }35 36 bool judge(LL_INT k, LL_INT n,const int x)37 {38 int i = 0, sum = 0, pos = 1;39 for (; i < n; i++)40 {41 for (; pos < n && nums[pos] - nums[i] <= x; pos++);42 sum += pos - i - 1;43 if (sum >= k) 44 return false;45 }46 return true;47 }

  

转载于:https://www.cnblogs.com/Philip-Tell-Truth/p/5140584.html

你可能感兴趣的文章
OpenGL(十八) 顶点数组和抗锯齿(反走样)设置
查看>>
Activiti 删除key值相同的所有不同版本的流程定义
查看>>
软件工程--第十六周学习进度
查看>>
yii2 ActiveRecord多表关联以及多表关联搜索的实现
查看>>
搜狗输入法安装--ubuntu
查看>>
ps/2接口键盘的输入及显示
查看>>
在IntelliJ IDEA中安装Junit,TestNG
查看>>
C-Scanf连续调用多次并且存在%c的问题
查看>>
JAVA(二)异常/包及访问权限/多线程/泛型
查看>>
1-4 金币阵列问题
查看>>
设计模式-结构型模式
查看>>
六星经典CSAPP笔记(1)计算机系统巡游
查看>>
css
查看>>
爬取全部的校园新闻
查看>>
第五章 SpringCloud之Eureka-Client使用RestTemplate实现服务之间的调用
查看>>
POJ 1258 Agri-Net (Prim&Kruskal)
查看>>
Swift———a Glance(极客学院)笔记
查看>>
【poj3294-不小于k个字符串中最长公共子串】后缀数组
查看>>
java如何获取其它用户登录的真是IP地址
查看>>
Jquery通过指定层次关系获取元素
查看>>