Submission #1214738

#TimeUsernameProblemLanguageResultExecution timeMemory
1214738vukhacminhSum Zero (RMI20_sumzero)C++20
61 / 100
509 ms58752 KiB
/** * Author : Vu Khac Minh **/ #include <bits/stdc++.h> #define ll long long using namespace std; const int maxn = 4e5 + 5; const int mod = 1e9+7; ll n,nquery,a[maxn],nxt[maxn][15]; pair<ll,ll> b[maxn]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n; for(int i =1;i<=n;i++) { cin>>a[i]; a[i]+=a[i-1]; b[i] = {a[i],i}; } b[0] = {0,0}; sort(b,b+n+1); for(int i =0;i<n;i++) { if(b[i].first == b[i+1].first) a[b[i].second] = b[i+1].second; else a[b[i].second] = n+1; } a[b[n].second] = n+1; for(int i =0;i<=n;i++) nxt[i][0] = a[i]; for(int i = 0;i<14;i++) nxt[n+1][i] = n+1; for(int i =n;i>=0;i--) { nxt[i][0] = min(nxt[i][0],nxt[i+1][0]); for(int j = 1;j<14;j++) nxt[i][j] = nxt[nxt[i][j-1]][j-1]; } cin>>nquery; while(nquery--) { int l,r,res=0; cin>>l>>r; l--; for(int i = 13;i>=0;i--) { while(nxt[l][i]<=r) { l = nxt[l][i]; res += (1ll<<i); } } cout<<res<<'\n'; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...