Submission #597406

# Submission time Handle Problem Language Result Execution time Memory
597406 2022-07-16T00:50:22 Z definitelynotmee Sum Zero (RMI20_sumzero) C++
100 / 100
571 ms 18252 KB
#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[4][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());
    
    for(int i = 0; i <= n+1; i++)
        pref[i] = lower_bound(all(pref2),pref[i])-pref2.begin();
    
    pref2.clear();

    vector<int> last(n+2,0);
    last[pref[0]] = 1;
 
    for(int i = 2; i<= n+1; i++){
        lift[0][i] = max(last[pref[i]],lift[0][i-1]);
        last[pref[i]] = i;
    }
 
    for(int i = 1; i < 4; i++){
        for(int j = 1; j <= n+1; j++){
            lift[i][j] = lift[i-1][j];
            for(int k = 0; k < 31; 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 = 3; i>= 0; i--){
            for(int j = 0; j < 31; j++){
                if(lift[i][r] >= l)
                    resp+=(1<<(5*i)), r = lift[i][r];
                else break;
            }
        }
        cout << resp << '\n';
    }
 
}
# Verdict Execution time Memory Grader output
1 Correct 3 ms 468 KB Output is correct
2 Correct 4 ms 468 KB Output is correct
3 Correct 5 ms 540 KB Output is correct
4 Correct 4 ms 468 KB Output is correct
5 Correct 4 ms 468 KB Output is correct
6 Correct 6 ms 540 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 468 KB Output is correct
2 Correct 4 ms 468 KB Output is correct
3 Correct 5 ms 540 KB Output is correct
4 Correct 4 ms 468 KB Output is correct
5 Correct 4 ms 468 KB Output is correct
6 Correct 6 ms 540 KB Output is correct
7 Correct 80 ms 4208 KB Output is correct
8 Correct 65 ms 4172 KB Output is correct
9 Correct 90 ms 4332 KB Output is correct
10 Correct 86 ms 4224 KB Output is correct
11 Correct 82 ms 4256 KB Output is correct
12 Correct 95 ms 4264 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 468 KB Output is correct
2 Correct 4 ms 468 KB Output is correct
3 Correct 5 ms 540 KB Output is correct
4 Correct 4 ms 468 KB Output is correct
5 Correct 4 ms 468 KB Output is correct
6 Correct 6 ms 540 KB Output is correct
7 Correct 80 ms 4208 KB Output is correct
8 Correct 65 ms 4172 KB Output is correct
9 Correct 90 ms 4332 KB Output is correct
10 Correct 86 ms 4224 KB Output is correct
11 Correct 82 ms 4256 KB Output is correct
12 Correct 95 ms 4264 KB Output is correct
13 Correct 449 ms 16364 KB Output is correct
14 Correct 374 ms 16060 KB Output is correct
15 Correct 571 ms 18192 KB Output is correct
16 Correct 448 ms 18196 KB Output is correct
17 Correct 332 ms 17796 KB Output is correct
18 Correct 541 ms 18252 KB Output is correct