#include <bits/stdc++.h>
#define ar array
//#define int long long
using namespace std;
using ll = long long;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
const int mod = 1e9 + 7;
const int LOG = 20;
const int maxn = 4e5 + 5;
int n, a[maxn], q, up[maxn][20];
signed main() {
ios_base::sync_with_stdio(false);
cout.tie(0); cin.tie(0);
cin >> n;
for(int i=1; i<=n; i++) cin >> a[i];
up[n+1][0] = n+2;
up[n+2][0] = n+2;
map<ll, int> mp; mp[0] = n+1;
ll sum = 0;
for(int i=n; i>=1; i--) {
sum += a[i];
up[i][0] = n+2;
if(mp.count(sum)) up[i][0] = mp[sum];
mp[sum] = i;
if(i < n) up[i][0] = min(up[i][0], up[i+1][0]);
}
for(int i=1; i<20; i++)
for(int u=1; u<=n+2; u++) up[u][i] = up[up[u][i-1]][i-1];
cin >> q;
while(q--) {
int l, r, ans = 0; cin >> l >> r;
r++;
for(int j=19; j>=0; j--) {
if(up[l][j] <= r) {
ans |= (1 << j);
l = up[l][j];
}
}
cout << ans << '\n';
}
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |