Submission #1119311

#TimeUsernameProblemLanguageResultExecution timeMemory
1119311MateiKing80Sum Zero (RMI20_sumzero)C++17
61 / 100
1053 ms15648 KiB
#pragma GCC optimize("Ofast") #include <bits/stdc++.h> using namespace std; const int N = 4e5; int tata[N + 5], ptr[N + 5], a[N + 5]; int main() { int n; cin >> n; for(int i = 1; i <= n; i ++) cin >> a[i], a[i] += a[i - 1]; map<int, int> mp; int last = n + 1; mp[a[n]] = n; a[n + 2] = -1; a[n + 1] = 0; tata[n + 1] = n + 2; tata[n + 2] = n + 2; for(int i = n; i; i --) { if(mp[a[i - 1]] != 0) last = min(last, mp[a[i - 1]]); mp[a[i - 1]] = i - 1; tata[i] = last + 1; a[i] = 1 + a[last + 1]; } int q; cin >> q; for(int i = n + 2; i; i --) { if(a[ptr[ptr[tata[i]]]] - a[ptr[tata[i]]] == a[ptr[tata[i]]] - a[tata[i]]) ptr[i] = ptr[ptr[tata[i]]]; else ptr[i] = tata[i]; assert(i == n + 2 || tata[i] > i); assert(i == n + 2 || ptr[i] > i); } for(int i = 1; i <= q; i ++) { int l, r, li; cin >> l >> r; li = l; r ++; while(1) { if(ptr[l] <= r) l = ptr[l]; else if(tata[l] <= r) l = tata[l]; else break; } cout << a[li] - a[l] << '\n'; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...