Submission #597404

#TimeUsernameProblemLanguageResultExecution timeMemory
597404definitelynotmeeSum Zero (RMI20_sumzero)C++98
61 / 100
425 ms20912 KiB
#include<bits/stdc++.h>
#define ff first
#define ss second
#define all(x) x.begin(), x.end()
using namespace std;
using ll = long long;
using pii = pair<int,int>;
using pll = pair<ll,ll>;
template<typename t>
using matrix = vector<vector<t>>;

int lift[5][400002];

int main(){
    
    cin.tie(0)->sync_with_stdio(0);
 
    int n, q;
    cin >> n;
 
    vector<ll> pref(n+2);
    vector<ll> pref2;
 
    for(int i = 2; i <= n+1; i++){
        cin >> pref[i];
        pref[i]+=pref[i-1];

    }
    
    pref2 = pref;
    sort(all(pref2));
    pref2.erase(unique(all(pref2)),pref2.end());
    vector<int> v(n+1);

    for(int i = 0; i <= n+1; i++)
        v[i] = lower_bound(all(pref2),pref[i])-pref2.begin();
    
    pref.clear();
    pref2.clear();

    vector<int> last(n+2,0);
    last[v[0]] = 1;
 
    for(int i = 2; i<= n+1; i++){
        lift[0][i] = max(last[v[i]],lift[0][i-1]);
        last[v[i]] = i;
    }
 
    for(int i = 1; i < 5; i++){
        for(int j = 1; j <= n+1; j++){
            lift[i][j] = lift[i-1][j];
            for(int k = 0; k < 15; k++)
                lift[i][j] = lift[i-1][lift[i][j]];
        }
    }
 
    cin >> q;
 
    while(q--){
        int l, r;
        cin >> l >> r;
        int resp = 0;
        r++;
        for(int i = 4; i>= 0; i--){
            for(int j = 0; j < 15; j++){
                if(lift[i][r] >= l)
                    resp+=(1<<(4*i)), r = lift[i][r];
                else break;
            }
        }
        cout << resp << '\n';
    }
 
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...