Submission #1144144

#TimeUsernameProblemLanguageResultExecution timeMemory
1144144raphaeltfaSum Zero (RMI20_sumzero)C++20
61 / 100
922 ms43948 KiB
#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
#include <map>

using namespace std;

int main(){
    int n;
    map<long, int> lastSeen;
    cin >> n;
    vector<long> arr(n + 1, 0);
    vector<vector<int>> up(18, vector<int> (n + 1, -1));
    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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...