#include <bits/stdc++.h>
using namespace std;
#define int long long
int n, q, a[400005], p[400005];
unordered_map<int, int> mp;
int up[400005][20];
int32_t main() {
ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
cin >> n; n++;
for (int i = 2; i <= n; i++) cin >> a[i];
int sum = 0; p[1] = 0; mp[0] = 1;
for (int i = 2; i <= n; i++) {
sum += a[i];
p[i] = p[i - 1];
if (mp.find(sum) != mp.end())
p[i] = max(p[i], mp[sum]);
mp[sum] = i;
up[i][0] = p[i];
for (int j = 1; j <= 18; j++)
up[i][j] = up[up[i][j - 1]][j - 1];
}
cin >> q;
while (q--) {
int l, r; cin >> l >> r; l++, r++;
int ans = 0;
for (int i = 18; i >= 0; i--) {
if (up[r][i] + 1 >= l)
r = up[r][i], ans |= (1 << i);
}
cout << ans << '\n';
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |