合并两个数组,新数组第k小的元素---二分--九度OJ1534
来源:互联网 发布:cc域名免费注册 编辑:程序博客网 时间:2024/06/05 14:07
#define _CRT_SECURE_NO_WARNINGS#include <cstdio>#include <algorithm>using namespace std;const int N = 1e5 + 7;typedef long long LL;LL a[N], b[N];LL cal(LL a[], LL b[], int n, int m, LL mid) { //返回小于等于mid的两数和的个数LL cnt = 0; int j = m - 1;for (int i = 0; i < n; ++i) {while (j >= 0 && a[i] + b[j] > mid)--j;cnt += 1 + j;}return cnt;}LL findK(LL a[], LL b[], int n, int m, LL k) {sort(a, a + n);sort(b, b + n);LL l = a[0] + b[0], r = a[n - 1] + b[m - 1];while (l <= r) {LL mid = l + r >> 1;if (k <= cal(a, b, n, m, mid)) r = mid - 1;else l = mid + 1;}return l;}int main(){int n, m; LL k;while (~scanf("%d%d%lld", &n, &m, &k)) {for (int i = 0; i < n; ++i)scanf("%lld", a + i);for (int i = 0; i < m; ++i)scanf("%lld", b + i);printf("%lld\n", findK(a, b, n, m, k));}return 0;}
数据范围较大,小心int溢出
阅读全文
0 0
- 合并两个数组,新数组第k小的元素---二分--九度OJ1534
- 面试算法:lg(k)时间查找两个排序数组合并后第k小的元素
- 【极难】【二分查找】返回两个数组中第k小的元素
- 求两个有序数组的第k小元素
- 九度OJ 1534 数组中第K小的数字 -- 二分查找
- 理解二分查找!!! 九度OJ-1534,数组中第K小的数字。
- 两个有序数组合并找第k个元素
- 九度 1534 数组中第K小的数字
- 两个有序数组,求有序合并以后的第K个元素
- 在两个排序数组中查找第k小元素
- 九度OJ月赛---题目1534:数组中第K小的数字 (二分搜索)
- 1540: 第k大数 两个数组元素相乘后的第k大( 二分答案 + 输入输出优化 )
- 谷歌面试题-两个数组合并后第k小的数字
- 有序和无序数组的二分搜索算法+select第k小的元素
- 求两个已排序的数组中所有元素的第K大(小)
- 求两个有序数组的中位数和者第k小元素
- 求两个有序数组的中位数或者第k小元素
- 从两个有序数组的并集中寻找第k小元素
- 宝宝出生 准备清单
- 脚本修改Makefile格式,确定命令前是tab键
- Velocity简明教程
- IAR无法打印浮点的解决方法
- HashMap
- 合并两个数组,新数组第k小的元素---二分--九度OJ1534
- URL中特殊字符的含义
- Bootstrap自学系列部分
- Android样式的开发:selector篇
- java中线程安全单例模式
- Delphi7安装ehlib卸载以及安装问 not a design time package.解决办法
- Android LinearLayout
- Android样式的开发:layer-list篇
- MySQL导出、删除索引Index和约束的方法