Submission #475304

#TimeUsernameProblemLanguageResultExecution timeMemory
475304AlexandruabcdeSum Zero (RMI20_sumzero)C++14
61 / 100
760 ms50092 KiB
#include <bits/stdc++.h> using namespace std; constexpr int NMAX = 4e5 + 5; typedef long long LL; int N; int V[NMAX]; int Q; int Next[20][NMAX]; map <LL, int> mp; int step = 0; void Read () { ios_base::sync_with_stdio(false); cin.tie(nullptr); cin >> N; for (int i = 1; i <= N; ++ i ) cin >> V[i]; } void Precalculare () { Next[0][N+1] = 1000000000; while ((1<<step) <= N) ++ step; LL suff = 0; mp[0] = N; for (int i = N; i >= 1; -- i ) { Next[0][i] = Next[0][i+1]; suff += 1LL * V[i]; int ind = mp[suff]; if (ind != 0) Next[0][i] = min(Next[0][i], ind); mp[suff] = i-1; } for (int L = 1; (1<<L) <= N; ++ L ) { Next[L][N+1] = 1000000000; for (int i = 1; i <= N; ++ i ) { if (Next[L-1][i] >= N) Next[L][i] = 1000000000; else Next[L][i] = Next[L-1][Next[L-1][i]+1]; } } } int Query (int start, int Finish) { int ans = 0; for (int i = step-1; i >= 0; -- i ) { if (Next[i][start] > Finish) continue; ans += (1<<i); start = Next[i][start]+1; } return ans; } void Solve () { cin >> Q; for (; Q; -- Q ) { int L, R; cin >> L >> R; cout << Query(L, R) << '\n'; } } int main () { Read(); Precalculare(); Solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...