Submission #1182982

#TimeUsernameProblemLanguageResultExecution timeMemory
1182982HasanV11010238Sum Zero (RMI20_sumzero)C++20
61 / 100
667 ms29868 KiB
#include <bits/stdc++.h>
#define ll long long
#define INF 10000000
using namespace std;
#define LOG 10
#define MAX 400002
int up[MAX][LOG];
int main(){
    int n, q, l, r, la;
    ll pr = 0, a;
    cin>>n;
    la = n + 1;
    vector<int> de(n + 2, 0);
    map<ll, int> ma;
    ma[0] = 0;
    for (int i = 1; i <= n; i++){
        cin>>a;
        pr += a;
        if (ma.find(pr) != ma.end()){
            if (la == n + 1) la = ma[pr];
            la = max(la, ma[pr]);
        }
        up[i][0] = la;
        de[i] = de[la] + 1;
        ma[pr] = i;
    }
    up[n + 1][0] = n + 1;
    for (int i = 1; i < LOG; i++){
        up[n + 1][i] = n + 1;
        for (int j = 1; j <= n; j++){
            up[j][i] = up[up[up[up[j][i - 1]][i - 1]][i - 1]][i - 1];
        }
    }
    cin>>q;
    while (q--){
        cin>>l>>r;
        int st = r;
        l--;
        for (int i = 19; i >= 0; i--){
            int jmp = up[r][i / 2];
            if (i % 2 == 1) jmp = up[jmp][i / 2];
            if (jmp >= l && jmp != n + 1){
                r = jmp;
            }
        }
        cout<<de[st] - de[r]<<"\n";
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...