| # | Time | Username | Problem | Language | Result | Execution time | Memory |
|---|---|---|---|---|---|---|---|
| 1338094 | nathan4690 | Sum Zero (RMI20_sumzero) | C++20 | 220 ms | 12860 KiB |
#include <bits/stdc++.h>
#define ll long long
#define ld long double
#define f1(i,n) for(int i=1;i<=n;i++)
#define __file_name ""
using namespace std;
const ll maxn=4e5+5, inf=1e18;
int n, a[maxn], dep[maxn], par[maxn], jmp[maxn], occ[maxn];
ll pfs[maxn];
bool has[maxn];
map<ll, int> mp;
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
if(fopen(__file_name ".inp", "r")){
freopen(__file_name ".inp", "r", stdin);
freopen(__file_name ".out", "w", stdout);
}
// code here
cin >> n;
ll sf = 0;
f1(i,n) {
cin >> a[i];
sf += a[i];
pfs[i] = sf;
}
sort(pfs, pfs+n+1);
int sz = unique(pfs, pfs+n+1) - pfs;
sf = 0;
f1(i,n){
sf += a[i];
has[i] |= has[i-1];
int idx = lower_bound(pfs, pfs+sz+1, sf) - pfs;
if(occ[idx] || sf == 0){
has[i] = 1;
par[i] = occ[idx];
}
par[i] = max(par[i], par[i-1]);
occ[idx] = i;
}
// f1(i,n) cout << has[i] << ' ';
// cout << '\n';
// f1(i,n) cout << par[i] << ' ';
// cout << '\n';
f1(u,n){
dep[u] = dep[par[u]] + 1;
int p = par[u];
if(dep[p] - dep[jmp[p]] == dep[jmp[p]] - dep[jmp[jmp[p]]]){
jmp[u] = jmp[jmp[p]];
}else{
jmp[u] = p;
}
}
int q; cin >> q;
while(q--){
int l, r; cin >> l >> r;
int u = r, pre;
// cout << "QUERY: " << l << ' ' << r << '\n';
while(u >= l){
pre = u;
// cout << "GOTO: " << u << '\n';
// u = par[u];
if(jmp[u] < l) u = par[u];
else u = jmp[u];
}
int ans = dep[r] - dep[pre];
if(has[pre] && par[pre] + 1 >= l) ans++;
cout << ans << '\n';
}
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... | ||||
