Submission #1303901

#TimeUsernameProblemLanguageResultExecution timeMemory
1303901chaitanyamehtaCurtains (NOI23_curtains)C++20
9 / 100
1596 ms67424 KiB
#include<bits/stdc++.h>
using namespace std;

#define int long long
vector<vector<int>> st;

struct Segtree{
    int sz = 1;
    vector<vector<int>> s;
    void init(int n){
        while(sz < n)sz*=2;
        s.resize(2*sz);
    }
    void set(int pos , int val){
        pos += sz-1;
        s[pos].push_back(val);
    }
    void build(){
        for(int i = sz - 1; i >= 1; i--){
            sort(s[i * 2].begin() , s[i*2].end());
            sort(s[i*2+1].begin() , s[i*2+1].end());
            vector<int> temp;
            merge(s[i*2].begin() , s[i*2].end() , s[i*2+1].begin() , s[i*2+1].end() , back_inserter(temp));
            s[i].swap(temp);
        }
    }
    int query(int ql , int qr , int l , int r , int cur ,int lim){
        if(l > r || l >qr || r < ql)return -1;
        if(ql <= l && r <= qr){
             
            auto &v = s[cur];
            auto it = upper_bound(v.begin() , v.end() , lim);
            if(it == v.begin())return -1;
            it--;
            return *it;
        }
        int m = (l + r) >>1;
        int L = query(ql , qr , l , m , cur *2 , lim);
        int R = query(ql , qr , m +1 , r , cur*2+1 , lim);
        return max(L , R);
    }

    int query(int l , int r, int lim){
        return query(l , r , 1 , sz -1 , 1 , lim);
    }

};

signed main(){
    ios::sync_with_stdio(0) ,cin.tie(0) , cout.tie(0);
    int n , m , q;
    cin>>n>>m>>q;

    vector<pair<int , int>> inter(m);
    for(int i = 0 ;i < m ; i++){
        int l , r;cin>>l>>r;
        inter[i] = {l , r};
    }
    
    Segtree st;
    st.init(n);

    for(int i = 0 ; i < m ; i++){
        st.set(inter[i].first , inter[i].second);
    }
    st.build();

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

        int cur = l - 1;
        bool ok = true;

        while(cur < r){
            int L = l;
            int R = cur + 1;
            int nxt = st.query(L , R , r);

            if(nxt < R || nxt == -1){ok =false;break;}

            cur = nxt;
        }

        if(ok)cout<<"YES\n";
        else cout<<"NO\n";
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...