제출 #1279733

#제출 시각아이디문제언어결과실행 시간메모리
1279733rayan_bdSum Zero (RMI20_sumzero)C++20
61 / 100
144 ms41976 KiB
#include <bits/stdc++.h> using namespace std; const int mxN = 4e5 + 1; const int mxB = 19; int a[mxN], dp[mxN][mxB]; 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; // 0 1 2 -3 100 // dp[n + 1][0] = n + 5; long long sum = 0; { map<long long, int> mp; mp[0] = n + 1; for(int i = n; i >= 1; --i){ sum += a[i]; if(mp.count(sum)){ dp[i][0] = min(dp[i + 1][0], mp[sum]); }else{ dp[i][0] = dp[i + 1][0]; } mp[sum] = i; } } for (int j = 1; j < mxB; j++) { for (int i = 1; i <= n; i++) { dp[i][j] = dp[dp[i][j - 1]][j - 1]; } } while (q--) { cin >> l >> r; int ans = 0; for (int j = mxB - 1; j >= 0; j--) { if (dp[l][j] <= (r + 1) && dp[l][j] > l) { l = dp[l][j]; ans += (1 << j); } } cout << ans << "\n"; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...