组合题5 个小题
已作答 0 / 5
(序列合并) 有两个长度为 N 的单调不降序列 A 和 B,序列的每个元素都是小于 109 的非负整数。在 A 和 B 中各取一个数相加可以得到 N2 个和,求其中第 K 小的和。上述参数满足 N≤105 和 1≤K≤N2。
1#include <iostream>2using namespace std;3 4const int maxn = 100005;5 6int n;7long long k;8int a[maxn], b[maxn];9 10int* upper_bound(int *a, int *an, int ai) {11 int l = 0, r = ___①___;12 while (l < r) {13 int mid = (l+r)>>1;14 if (___②___) {15 r = mid;16 } else {17 l = mid + 1;18 }19 }20 return ___③___;21}22 23long long get_rank(int sum) {24 long long rank = 0;25 for (int i = 0; i < n; ++i) {26 rank += upper_bound(b, b+n, sum - a[i]) - b;27 }28 return rank;29}30 31int solve() {32 int l = 0, r = ___④___;33 while (l < r) {34 int mid = ((long long)l+r)>>1;35 if (___⑤___) {36 l = mid + 1;37 } else {38 r = mid;39 }40 }41 return l;42}43 44int main() {45 cin >> n >> k;46 for (int i = 0; i < n; ++i) cin >> a[i];47 for (int i = 0; i < n; ++i) cin >> b[i];48 cout << solve() << endl;49}50 ⑤ 处应填( )?