Submission #947796

#TimeUsernameProblemLanguageResultExecution timeMemory
947796IcelastSum Zero (RMI20_sumzero)C++17
0 / 100
6 ms4908 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(i);
        //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...