Submission #646781

#TimeUsernameProblemLanguageResultExecution timeMemory
646781k_balint31415Sum Zero (RMI20_sumzero)C++14
61 / 100
525 ms52128 KiB
#include <bits/stdc++.h> using namespace std; const int c=4e5+5; typedef long long ll; int n,q; ll arr[c]; int seg[c]; map<ll,int> mp; int up[c][20]; int main(){ ios_base::sync_with_stdio(false); cin.tie(0); cin>>n; mp[0]=0; for(int i=1;i<=n;i++){ cin>>arr[i]; arr[i]+=arr[i-1]; if(mp.find(arr[i]) != mp.end()){ seg[i]=mp[arr[i]]+1; } else seg[i]=-1; mp[arr[i]]=i; up[i][0]=c; } up[n+1][0]=n+2; up[n+2][0]=n+2; for(int i=n;i>=1;i--){ if(seg[i]!=-1) up[seg[i]][0]=i+1; up[i][0]=min(up[i][0],up[i+1][0]); } for(int j=1;j<20;j++){ for(int i=1;i<=n+2;i++){ up[i][j]=up[up[i][j-1]][j-1]; } } cin>>q; while(q--){ int l,r; cin>>l>>r; int ans=0; int cur=l; for(int i=19;i>=0;i--){ if(up[cur][i]<=r+1){ cur=up[cur][i]; ans+=1<<i; } } cout << ans << '\n'; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...