Submission #1164870

#TimeUsernameProblemLanguageResultExecution timeMemory
1164870emptypringlescanSum Zero (RMI20_sumzero)C++20
61 / 100
174 ms48840 KiB
#include <bits/stdc++.h> using namespace std; int par[400005]; int find(int x){ if(par[x]==x) return x; return par[x]=find(par[x]); } int32_t main(){ ios::sync_with_stdio(0); cin.tie(0); for(int i=0; i<400005; i++) par[i]=i; int n; cin >> n; long long pref[n+1]; unordered_map<long long,int> occ; occ[0]=0; pref[0]=0; int blk[n+1]; memset(blk,-1,sizeof(blk)); for(int i=1; i<=n; i++){ cin >> pref[i]; pref[i]+=pref[i-1]; if(occ.find(pref[i])!=occ.end()){ blk[i]=occ[pref[i]]+1; } occ[pref[i]]=i; } int q; cin >> q; pair<pair<int,int>,int> qu[q]; for(int i=0; i<q; i++){ cin >> qu[i].first.second >> qu[i].first.first; qu[i].second=i; } sort(qu,qu+q); int off[n+5],val[n+5],ans[q]; memset(off,0,sizeof(off)); memset(val,0,sizeof(val)); vector<int> uwu[n+5]; for(int i=1; i<=n; i++) uwu[i].push_back(i); int base=1,c=0; for(int i=1; i<=n; i++){ if(blk[i]!=-1){ for(; base<=blk[i]; base++){ if(uwu[base].size()<=uwu[i+1].size()){ for(int j:uwu[base]){ uwu[i+1].push_back(j); val[j]+=off[base]-off[i+1]+1; } uwu[base].clear(); } else{ for(int j:uwu[i+1]){ uwu[base].push_back(j); val[j]+=off[i+1]-off[base]-1; } uwu[i+1].clear(); swap(uwu[base],uwu[i+1]); off[i+1]=off[base]+1; off[base]=0; } par[base]=i+1; } } while(c<q&&qu[c].first.first==i){ ans[qu[c].second]=val[qu[c].first.second]+off[find(qu[c].first.second)]; c++; } } for(int i=0; i<q; i++) cout << ans[i] << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...