第K大的数
来源:互联网 发布:mac休眠后继续下载吗 编辑:程序博客网 时间:2024/04/30 10:06
数组A和数组B,里面都有n个整数。数组C共有n^2个整数,分别是A[0] * B[0],A[0] * B[1] ......A[1] * B[0],A[1] * B[1]......A[n - 1] * B[n - 1](数组A同数组B的组合)。求数组C中第K大的数。
例如:A:1 2 3,B:2 3 4。A与B组合成的C包括2 3 4 4 6 8 6 9 12共9个数。
Input
第1行:2个数N和K,中间用空格分隔。N为数组的长度,K对应第K大的数。(2 <= N <= 50000,1 <= K <= 10^9)第2 - N + 1行:每行2个数,分别是A[i]和B[i]。(1 <= A[i],B[i] <= 10^9)
Output
输出第K大的数。
Input示例
3 21 22 33 4
Output示例
9
#include<cstdio> #include<iostream> #include<algorithm> using namespace std; typedef long long LL; const int SIZE = 5e4 + 5; int n, k; LL A[SIZE], B[SIZE]; LL check(LL x) { LL sum = 0; for (int i = n; i >= 1; i--) { int t = lower_bound(B + 1, B + 1 + n, (x - 1) / A[i] + 1) - B; sum += n - t + 1; if (sum == 0) { break; } } return sum; } void fun() { LL l = 1, r = A[n] * B[n], mid; while (l <= r) { mid = (l + r) >> 1; if (check(mid) < k) { r = mid - 1; } else { l = mid + 1; } } cout << l-1 << endl;} int main() { cin >> n >> k; for(int i = 1; i <= n; i++) { cin >> A[i] >> B[i]; } sort(A + 1, A + 1 + n); sort(B + 1, B + 1 + n); fun(); return 0; }
阅读全文
0 0
- 第K大的数
- 第k大的数
- 第k大的数
- 第K大的数
- 第k大的数
- 第K大的数
- 第K大的数
- 第K大的数
- 第K大的数
- 得到第K个大的数
- 找第k大的数
- 求第K大的数~~
- 寻找第K大的数
- 寻找第K大的数
- 寻找第K大的数
- 寻找第K大的数
- 找第K大的数
- 算法--选择第K大的数
- css3魔方测试
- 电商推荐算法应用
- 【面经笔记】红云融通电话二面
- ImgNet Top-5
- 206. Reverse Linked List
- 第K大的数
- CSU
- 秒杀99%的海量数据处理面试题(一)
- java 自己写的一个自动分析对象的mysql数据库操作工具
- 洛谷 P3413 SAC#1
- 显示eclipse中Problem窗口的方法
- db,dbm,w,dbw,mw的换算关系
- uva 11426 欧拉函数
- Oracle中增加表空间大小的四种方法