CF1933E 题解
思路
很明显 越接近 答案越大,于是我们可以定义一个前缀和数组 ,然后二分找到最后一个 的数和第一个 的数,比较一下两个数距离 的距离哪个小就输出哪个。
题解
# include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair <int, int> pii;
const int inf = 2e9;
int t, n, q, a[100005], l, r, u, ans1, ans2;
int main () {
ios::sync_with_stdio (0);
cin.tie (0);
cout.tie (0);
cin >> t;
while (t --) {
cin >> n;
for (int i = 1; i <= n; ++ i)
cin >> a[i], a[i] += a[i - 1];
cin >> q;
while (q --) {
cin >> l >> u;
r = lower_bound (a + 1, a + 1 + n, u + a[l - 1]) - a;
ans2 = inf;
if (r <= n)
ans1 = r, ans2 = a[r] - a[l - 1] - u;
if (-- r >= l && u + a[l - 1] - a[r] < ans2)
ans1 = r;
cout << ans1 << ' ';
}
cout << '\n';
}
return 0;
}

浙公网安备 33010602011771号