Submission #1279676

#TimeUsernameProblemLanguageResultExecution timeMemory
1279676rayan_bdSum Zero (RMI20_sumzero)C++20
0 / 100
3 ms1080 KiB
#include <bits/stdc++.h> using namespace std; const int mxN = 4e5 + 100; int a[mxN], dp[mxN][27]; signed main(){ ios_base::sync_with_stdio(0); cin.tie(nullptr); cout.tie(nullptr); int n, l, r, q; cin >> n; for(int i = 1; i <= n; ++i) cin >> a[i]; cin >> q; map<int, int> mp; mp[0] = n + 1; // 0 1 2 -3 100 // int last = 0; for(int i = n, sum = 0; i >= 1; --i){ sum += a[i]; if(mp.count(sum)){ dp[i][0] = mp[sum]; last = dp[i][0]; }else{ dp[i][0] = last; } mp[sum] = i; } for(int i = n; i >= 1; --i){ for(int j = 1; j < 26; ++j){ dp[i][j] = dp[dp[i][j - 1]][j - 1]; } } auto query = [&](int l, int r){ int ans = 0; for(int i = 25; i >= 0; --i){ if(dp[l][i] > l && dp[l][i] == (r + 1)){ ans += (1ll << i); break; }else if(dp[l][i] > l && dp[l][i] <= r){ l = dp[l][i]; ans += (1ll << i); } } return ans; }; while(q--){ cin >> l >> r; cout << query(l, r) << "\n"; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...