Submission #488328

#TimeUsernameProblemLanguageResultExecution timeMemory
488328boris_mihovSum Zero (RMI20_sumzero)C++17
61 / 100
522 ms47892 KiB
#include <iostream> #include <unordered_map> using namespace std; const int maxn = 4e5+10, maxlog = 19; int sparse[maxlog][maxn]; int jump[maxn]; int a[maxn], n, q; void build_sparse() { for (int i = 1 ; i <= n ; ++i) sparse[0][i] = jump[i]; for (int log = 1 ; (1 << log) <= n ; ++log) for (int i = 1 ; i <= n ; ++i) sparse[log][i] = sparse[log-1][sparse[log-1][i]]; } int lifting(int l, int r) { int ans = 0; for (int log = maxlog-1 ; log >= 0 ; --log) { if (sparse[log][l] == 0) continue; if (sparse[log][l] <= r+1) { ans += (1 << log); l = sparse[log][l]; } } return ans; } unordered_map < long long, int > um; void solve() { fill(jump, jump+n+1, n+2); long long sum = 0; for (int i = 1 ; i <= n+1 ; ++i) { jump[um[sum]] = i; um[sum] = i; sum += a[i]; } for (int i = n-1 ; i >= 1 ; --i) jump[i] = min(jump[i], jump[i+1]); build_sparse(); int l, r; cin >> q; for (int i = 1 ; i <= q ; ++i) { cin >> l >> r; cout << lifting(l, r) << '\n'; } } void fast_io() { ios_base :: sync_with_stdio(0); cin.tie(nullptr); cout.tie(nullptr); cerr.tie(nullptr); } void read() { cin >> n; for (int i = 1 ; i <= n ; ++i) cin >> a[i]; } int main () { fast_io(); read(); solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...