Submission #915396

# Submission time Handle Problem Language Result Execution time Memory
915396 2024-01-23T19:47:25 Z SalihSahin Osumnjičeni (COCI21_osumnjiceni) C++14
0 / 110
1000 ms 94976 KB
#include<bits/stdc++.h>
#define pb push_back
#define int long long
#define mp make_pair
using namespace std;
 
const int mod = 998244353;
const int N = 4e5 + 5;
const int inf = 1e17*2;

struct SEGT{
    vector<int> tree, lazy;

    void init(int n){
        tree.assign(4*n, 0);
    }

    void update(int ind, int l, int r, int pos, int val){
        if(l == r){
            tree[ind] += val;
        }
        else{
            int m = (l + r)/2;

            if(pos <= m) update(ind*2, l, m, pos, val);
            else update(ind*2+1, m+1, r, pos, val);
            tree[ind] = tree[ind*2] + tree[ind*2+1];
        }
    }

    int query(int ind, int l, int r, int ql, int qr){
        if(l > r || l > qr || r < ql) return 0;
        if(l >= ql && r <= qr) return tree[ind];
        else{
            int m = (l + r)/2;

            return query(ind*2, l, m, ql, qr) + query(ind*2+1, m+1, r, ql, qr);
        }
    }
};

int32_t main(){
    int n;
    cin>>n;
    vector<pair<int, int> > a(n);
    set<int> ste;
    for(int i = 0; i < n; i++){
        int l, r;
        cin>>l>>r;
        ste.insert(l);
        ste.insert(r);
        a[i] = mp(l, r);
    }
    map<int, int> conv;
    int val = 1;
    for(auto itr: ste){
        conv[itr] = val;
        val++;
    }
    for(int i = 0; i < n; i++){
        a[i] = mp(conv[a[i].first], conv[a[i].second]);
    }
    SEGT seg;
    seg.init(N);
    vector<int> go(n);
    int r = 0;
    for(int l = 0; l < n; l++){
        while(r < n && seg.query(1, 1, N, a[r].first, a[r].second) == 0){
            seg.update(1, 1, N, a[r].first, 1);
            seg.update(1, 1, N, a[r].second, 1);
            r++;
        }
        go[l] = r;
        seg.update(1, 1, N, a[l].first, -1);
        seg.update(1, 1, N, a[l].second, -1);
    }
    int K = 18;

    /*
    for(int i = 0; i < n; i++){
        cout<<i<<" => "<<go[i]<<endl;
    }
    */
    
    vector<vector<int> > lift(K, vector<int>(n+1));
    for(int i = 0; i < n; i++){
        lift[0][i] = go[i];
    }
    lift[0][n] = n;

    for(int i = 1; i < K; i++){
        for(int j = 0; j <= n; j++){
            lift[i][j] = lift[i-1][lift[i-1][j]];
        }
    }

    int q;
    cin>>q;
    while(q--){
        int l, r;
        cin>>l>>r;
        int ans = 0;
        l--, r--;

        for(int i = K-1; i >= 0; i--){
            if(lift[i][l] <= r){
                //cout<<i<<" => "<<l<<" "<<lift[i][l]<<" "<<r<<endl;
                l = lift[i][l];
                ans += (1 << i);
            }
        }

        cout<<ans + 1<<endl;
    }
    return 0;
}
# Verdict Execution time Memory Grader output
1 Incorrect 879 ms 91408 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 22 ms 14940 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 22 ms 14940 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1026 ms 94976 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 879 ms 91408 KB Output isn't correct
2 Halted 0 ms 0 KB -