// GPT'S code
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int MAXN = 400000 + 5;
const int LOG = 20;
int n, q;
ll c[MAXN];
ll p[MAXN]; // prefix sums
int pre[MAXN]; // previous occurrence
int nxt[MAXN]; // next jump
int up[LOG][MAXN]; // binary lifting
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n;
for (int i = 1; i <= n; i++) cin >> c[i];
// prefix sums
p[0] = 0;
for (int i = 1; i <= n; i++) p[i] = p[i-1] + c[i];
// compute pre[i]
unordered_map<ll, int> last;
last.reserve(n * 2);
last.max_load_factor(0.7);
for (int i = 0; i <= n; i++) {
if (last.count(p[i])) pre[i] = last[p[i]];
else pre[i] = -1;
last[p[i]] = i;
}
// build nxt
for(int i=0; i<=n; i++){
nxt[i] = n+1;
for(int j=i+1; j<=n; j++){
if(pre[j] >= i) {nxt[i] = j; break;}
}
}
// binary lifting
for (int i = 0; i <= n; i++) up[0][i] = nxt[i];
for (int k = 1; k < LOG; k++) {
for (int i = 0; i <= n; i++) {
if (up[k-1][i] <= n)
up[k][i] = up[k-1][ up[k-1][i] ];
else
up[k][i] = n + 1;
}
}
cin >> q;
while (q--) {
int L, R;
cin >> L >> R;
int cur = L - 1;
int ans = 0;
for (int k = LOG - 1; k >= 0; k--) {
if (up[k][cur] <= R) {
ans += (1 << k);
cur = up[k][cur];
}
}
cout << ans << '\n';
}
return 0;
}