# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
961604 | vjudge1 | Sum Zero (RMI20_sumzero) | C++17 | 1 ms | 348 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
// author : HuuHung
// 25.3.2024
#include <bits/stdc++.h>
#define ll long long
#define pb push_back
#define vi vector <int>
using namespace std;
const int N = 4e5 + 5;
// * end
int n, q;
map <ll, int> mp;
vector <vi> adj, ev;
vi l, ans;
vector <int> dhs;
void dfs(int u){
dhs.pb(u);
for (int i : ev[u]){
int L = 0;
int R = dhs.size() - 1;
while (L <= R){
int mid = L + R >> 1;
if (dhs[mid] >= l[i]){
ans[i] = mid;
R = mid - 1;
}
else L = mid + 1;
}
ans[i] = dhs.size() - ans[i];
}
for (int v : adj[u]) dfs(v);
dhs.pop_back();
}
void solve(){
cin >> n;
mp[0] = 1;
ll sum = 0;
int nxt = -1;
adj[0].pb(1);
adj.resize(n + 2);
for (int i = 1; i <= n; ++ i){
int c; cin >> c;
sum += c;
nxt = max(nxt, mp[sum] - 1);
adj[nxt + 1].pb(i + 1);
//cout << nxt[i] << endl;
mp[sum] = i + 1;
}
cin >> q;
ev.resize(n + 2);
l.resize(q + 1);
ans.resize(q + 1);
for (int i = 1; i <= q; ++ i){
int r;
cin >> l[i] >> r; ++ r;
ev[r].pb(i);
}
dfs(0);
for (int i = 1; i <= q; ++ i) cout << ans[i] - 1 << '\n';
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t = 1;
while (t --) solve();
return 0;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |