#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
#include <map>
using namespace std;
int main(){
int n;
cin >> n;
vector<vector<int>> up(18, vector<int> (n + 1, -1));
if(true){
vector<long> arr(n + 1, 0);
map<long, int> lastSeen;
for(int i = 1; i <= n; i++){
cin >> arr[i];
arr[i] += arr[i - 1];
if(lastSeen[arr[i]] == 0 && arr[i] != 0) lastSeen[arr[i]] = -1;
up[0][i] = max(up[0][i - 1], lastSeen[arr[i]]);
lastSeen[arr[i]] = i;
}
} for(int i = 1; i < 18; i++){
for(int j = 1; j <= n; j++){
if(up[i - 1][j] != -1) up[i][j] = up[i - 1][up[i - 1][j]];
}
} int m;
cin >> m;
for(int test = 0; test < m; test++){
int a, b, k = 0;
cin >> a >> b;
for(int i = 17; i >= 0; i--){
if(up[i][b] >= a - 1){
k |= (1 << i);
b = up[i][b];
} if(b == -1) break;
} cout << k << endl;
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |