51nod 1105 第K大的数
来源:互联网 发布:文森特 梵高知乎 编辑:程序博客网 时间:2024/06/09 18:09
二分法。
二分套二分。很好玩的一个题目。
把两个数组排序
先二分结果,再去判断这个结果是不是第k大。判断时候枚举a数组里面的值,二分查找b数组里面最小可以和当前枚举的a数组里面的值相乘大于第一层二分的结果,比如说a[i] * b[j] > k(二分的结果), 那么j后面的所有数都和a[i]相乘都比k大,最后统计一下有多少个比k大
#include<cstdio>#include<algorithm>using namespace std;typedef long long ll;const int maxn = 1e5;ll a[maxn];ll b[maxn];ll n, m;int judge(ll k){ int tot = 0; for(int i = 1; i <= n; i++){ int l = 1, r = n; while(l < r){ int mid = (l + r) >> 1; if(a[i] * b[mid] > k){ r = mid; }else l = mid + 1; } if(a[i] * b[l] > k) tot += n - l + 1; } return tot <= m - 1;}int main(){ scanf("%lld%lld", &n, &m); for(int i = 1; i <= n; i++){ scanf("%d%d", &a[i], &b[i]); } sort(a + 1, a + n + 1); sort(b + 1, b + n + 1); ll l = 0, r = a[n] * b[n], ans; while(l <= r){ ll mid = (l + r) >> 1; if(judge(mid)){ r = mid - 1; ans = mid; }else l = mid + 1; } printf("%lld\n", ans); return 0;}
阅读全文
0 0
- 51nod(第K大的数)
- 51nod 1105:第K大的数
- 51nod 1105 第K大的数 (二分答案)
- 51Nod-1105-第K大的数
- 51nod 1105 第K大的数(二分)
- 51nod-1105 第K大的数
- 51nod 1105 第K大的数
- 51nod 1105 第K大的数
- 51NOD 1105 第K大的数 【二分】
- 51nod 1105 第K大的数
- 51nod 1105 第K大的数【二分】
- 51nod 1105 第K大的数
- 51nod-1105-第K大的数
- 51Nod 1105 第k大的数 二分
- 51nod 1105 第K大的数 二分
- 51Nod-1175-区间中第K大的数
- 51nod 1175 区间中第K大的数
- 51NOD 1105 第K大的数(二分好题)
- Linux shell工作原理详细分析
- 在Pypi上发布自己的Python包
- 4.HTML表格
- (转)非极大抑制(Non-Maximum Suppression)
- H5+css+js一个简单的图书管理系统
- 51nod 1105 第K大的数
- Linux命令行模式安装VMware Tools 详解
- 共享锁(S锁)和排它锁(X锁)
- DOS命令 tasklist
- 【java8】持续精进-之BiFunction
- JAVA笔记三:JAVA-SE上
- HDU
- css3写幻灯片css部分
- volatile关键字解析