显示原始代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
struct stu {
ll a, b;
} m[200001], s[200001];
bool cmp(stu a, stu b) {
if (a.a == b.a)
return a.b > b.b;
return a.a < b.a;
}
ll func(int n) {
int m = n >> 1;
return 1ll * (1 + m) * m + (n & 1) * (m + 1);
}
int main() {
int N, M;
ll x, minf = 0;
scanf("%d", &N);
for (int i = 1; i <= N; ++i) {
scanf("%d", &m[i].a);
}
for (int i = 1; i <= N; ++i) {
scanf("%d", &m[i].b);
}
sort(m + 1, m + N + 1, cmp);
for (int i = 1; i <= N; ++i) {
s[i].a = m[i].a - s[i - 1].b;
s[i].b = s[i - 1].b + m[i].b;
if (minf < s[i].a) {
minf = s[i].a;
}
}
++minf;
scanf("%d", &M);
while (M--) {
int l = 0, r = 1e9 + 1;
scanf("%lld", &x);
x = minf - x;
if (x <= 0) {
printf("0 ");
continue;
}
while (r > l) {
int mid = l + (r - l >> 1);
if (func(mid) < x) {
l = mid + 1;
} else {
r = mid;
}
}
printf("%d ", l);
}
return 0;
}