Submission #947795

#TimeUsernameProblemLanguageResultExecution timeMemory
947795IcelastSum Zero (RMI20_sumzero)C++17
0 / 100
5 ms4696 KiB
#include <iostream> #include <bits/stdc++.h> #define ll long long using namespace std; const ll maxn = 5*1e5+5, INF = 4e18+9; int n, m, Q, N; struct creature{ ll x, v; }; creature a[maxn]; void inp(){ cin >> n; m = 0; for(int i = 1; i <= n; i++){ cin >> a[i].v; a[i].x = i; } for(int i = n+1; i <= n+m; i++){ cin >> a[i].x >> a[i].v; a[i].v*=-1; } cin >> Q; N = n+m; } bool cmp(creature a, creature b){ return a.x < b.x; } map<ll, ll> mp; int up[maxn][22]; void solve(){ vector<ll> v; sort(a+1, a+1+N, cmp); for(int i = 1; i <= N; i++){ v.push_back(1); //cout << a[i].v << " "; } // cout << "\n"; ll sum = 0; for(int j = 0; j < 20; j++){ for(int i = 0; i <= N; i++){ up[i][j] = N+1; } } mp[0] = 0; for(int i = 1; i <= N; i++){ sum += a[i].v; if(mp.count(sum)) up[mp[sum]][0] = i; mp[sum] = i; } for(int i = N-1; i >= 0; i--){ if(up[i][0] > up[i+1][0]){ up[i][0] = up[i+1][0]; } } for(int j = 1; j < 20; j++){ for(int i = 0; i <= N; i++){ int k = i; for(int t = 0; t < 20; t++){ if(k <= N){ k = up[k][j-1]; } } up[i][j] = k; } } int x, y; while(Q--){ cin >> x >> y; int l = lower_bound(v.begin(), v.end(), x) - v.begin()+1, r = upper_bound(v.begin(), v.end(), y)-v.begin(); // cout << l << " " << r << "\n"; int k = l-1, t = 19, res = 0; while(t >= 0){ if(up[k][t] <= r){ k = up[k][t]; res += (1<<(4*t)); }else{ t--; } } cout << res << "\n"; } } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); inp(); solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...