제출 #1342484

#제출 시각아이디문제언어결과실행 시간메모리
1342484siquy3001Sum Zero (RMI20_sumzero)C++20
61 / 100
284 ms42980 KiB
#include<bits/stdc++.h>
using namespace std;
#define ll int
ll n,c[400005],q,l,r,nxt[400005][20],pw[30];
map<ll,ll>mp;
int main(){
    ios_base::sync_with_stdio(0);cin.tie(0);cin.tie(0);
    cin>>n;
    pw[0]=1;
    nxt[n+1][0]=n+1;
    for(int i=1;i<=19;i++){
        pw[i]=pw[i-1]*2;
        nxt[n+1][i]=n+1;
    }
    for(int i=1;i<=n;i++){
        cin>>c[i];
        c[i]+=c[i-1];
        if (mp[c[i]]!=0)nxt[mp[c[i]]][0]=i;
        if (c[i]==0 && mp[c[i]]==0)nxt[0][0]=i;
        mp[c[i]]=i;
    }
    for(int i=0;i<=n;i++){
        if (nxt[i][0]==0)nxt[i][0]=n+1;
    }
    for(int i=n-1;i>=0;i--){
        nxt[i][0]=min(nxt[i][0],nxt[i+1][0]);
    }
    for(int i=1;i<=19;i++){
        for(int j=0;j<=n;j++){
            nxt[j][i]=nxt[nxt[j][i-1]][i-1];
        }
    }
    cin>>q;
    for(int query=1;query<=q;query++){
        cin>>l>>r;
        ll cur=l-1;
        ll res=0;
        for(int i=19;i>=0;i--){
            if (nxt[cur][i]<=r){
                res+=pw[i];
                cur=nxt[cur][i];
            }
        }
        cout<<res<<'\n';
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...