Submission #1172956

#TimeUsernameProblemLanguageResultExecution timeMemory
1172956DangKhoizzzzCurtains (NOI23_curtains)C++17
0 / 100
20 ms39496 KiB
#include <bits/stdc++.h>
#define pii pair <int , int>
#define fi first
#define se second

using namespace std;

const int INF = 1e9;
const int maxn = 5e5 + 7;


struct modified_Segment_Tree
{
    int st[maxn*4] , lazy[maxn*4];

    void init()
    {
        for(int i = 1; i < maxn*4; i++) st[i] = lazy[i] = INF;
    }

    void down(int id , int l , int r)
    {
        if(lazy[id] == INF) return;

        st[id] = min(st[id] , lazy[id]);

        if(l != r)
        {
            lazy[id*2] = lazy[id];
            lazy[id*2+1] = lazy[id];
        }
        lazy[id] = INF;
    }

    void update(int id , int l , int r , int u , int v , int val)
    {
        down(id , l , r);
        if(r < u || l > v) return;
        if(u <= l && r <= v)
        {
            lazy[id] = val;
            down(id , l , r);
            return;
        }
        int mid = (l+r) >> 1;
        update(id*2 , l , mid , u , v , val);
        update(id*2+1 , mid+1 , r , u , v , val);
        st[id] = max(st[id*2] , st[id*2+1]);
    }

    int get(int id , int l , int r , int u , int v)
    {
        down(id , l , r);
        if(r < u || l > v) return -INF;
        if(u <= l && r <= v) return st[id];
        int mid = (l+r) >> 1;
        int Lget = get(id*2 , l , mid , u , v);
        int Rget = get(id*2+1 , mid+1 , r , u , v);
        return max(Lget , Rget);
    }
};

int n , m , q;
modified_Segment_Tree ST;
vector <int> Rg[maxn];
vector <pii> query[maxn];

bool ans[maxn];

void solve()
{
    cin >> n >> m >> q;
    for(int i = 1; i <= m; i++)
    {
        int l , r; cin >> l >> r;
        Rg[l].push_back(r);
    }
    for(int i = 1; i <= q; i++)
    {
        int l , r; cin >> l >> r;
        query[l].push_back({r , i});
    }

    ST.init();

    for(int l = n; l >= 1; l--)
    {
        for(int r: Rg[l]) ST.update(1 , 1 , n , l , r , r);
        
        for(pii tmp: query[l])
        {
            int r = tmp.fi , id = tmp.se;
            if(ST.get(1 , 1 , n , l , r) == r) ans[id] = 1;
        }

    }

    for(int i = 1; i <= q; i++)
    {
        if(ans[i]) cout << "YES" << '\n';
        else cout << "NO" << '\n';
    }
}

signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    solve();
    return 0;
}
#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...