Submission #1130821

#TimeUsernameProblemLanguageResultExecution timeMemory
1130821VMaksimoski008Sum Zero (RMI20_sumzero)C++17
100 / 100
580 ms22436 KiB
#include <bits/stdc++.h> using namespace std; const int maxn = 4e5 + 5; int n, a[maxn], q, up[maxn][4]; signed main() { ios_base::sync_with_stdio(false); cout.tie(0); cin.tie(0); cin >> n; for(int i=1; i<=n; i++) cin >> a[i]; up[n+1][0] = n+2; up[n+2][0] = n+2; map<long long, int> mp; mp[0] = n+1; long long sum = 0; for(int i=n; i>=1; i--) { sum += a[i]; up[i][0] = n+2; if(mp.count(sum)) up[i][0] = mp[sum]; mp[sum] = i; if(i < n) up[i][0] = min(up[i][0], up[i+1][0]); } for(int i=1; i<4; i++) { for(int u=1; u<=n+2; u++) { up[u][i] = up[u][i-1]; for(int j=0; j<31; j++) up[u][i] = up[up[u][i]][i-1]; } } cin >> q; while(q--) { int l, r, ans = 0; cin >> l >> r; r++; for(int i=3; i>=0; i--) { for(int j=0; j<31; j++) { if(up[l][i] <= r) { ans += (1 << ( 5 * i )); l = up[l][i]; } else break; } } cout << ans << '\n'; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...