Submission #850773

#TimeUsernameProblemLanguageResultExecution timeMemory
850773alexddSum Zero (RMI20_sumzero)C++17
61 / 100
315 ms30152 KiB
#include<bits/stdc++.h> using namespace std; int n; long long pref[500005]; int anc[500005][9]; map<long long,int> ult; int put5[9]; void calc_anc() { for(int p=1;p<9;p++) { for(int i=1;i<=n+2;i++) { anc[i][p]=anc[anc[anc[anc[anc[i][p-1]][p-1]][p-1]][p-1]][p-1]; } } } signed main() { ios_base::sync_with_stdio(0);cin.tie(0); put5[0]=1; for(int i=1;i<9;i++) put5[i]=put5[i-1]*5; cin>>n; int a; for(int i=1;i<=n;i++) { cin>>a; pref[i]=pref[i-1]+a; } anc[n+1][0]=n+2; anc[n+2][0]=n+2; for(int i=n;i>0;i--) { anc[i][0]=anc[i+1][0]; ult[pref[i]]=i; if(ult[pref[i-1]]!=0) anc[i][0]=min(anc[i][0], ult[pref[i-1]]+1); } calc_anc(); int cntq,b; cin>>cntq; for(int i=0;i<cntq;i++) { cin>>a>>b; int rez=0; for(int p=8;p>=0;p--) { if(anc[a][p]-1<=b) { rez+=put5[p]; a=anc[a][p]; } if(anc[a][p]-1<=b) { rez+=put5[p]; a=anc[a][p]; } if(anc[a][p]-1<=b) { rez+=put5[p]; a=anc[a][p]; } if(anc[a][p]-1<=b) { rez+=put5[p]; a=anc[a][p]; } } cout<<rez<<"\n"; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...