제출 #1262095

#제출 시각아이디문제언어결과실행 시간메모리
1262095rayan_bdCurtains (NOI23_curtains)C++20
100 / 100
1321 ms114040 KiB
#include <bits/stdc++.h>
using namespace std;
const int mxN = 5e5 + 1000;
const int INF = 1e9;
int seg[mxN * 4], lz[mxN * 4];
void push(int node, int start, int end){
    seg[node] = max(seg[node], lz[node]);
    if(start != end) lz[node * 2 + 1] = max(lz[node * 2 + 1], lz[node]);
    if(start != end) lz[node * 2 + 2] = max(lz[node * 2 + 2], lz[node]);
    lz[node] = 0;
}
void upd(int node, int start, int end, int l, int r, int v){
    push(node, start, end);
    if(start > r || end < l) return;
    if(start >= l && end <= r){
        lz[node] = max(lz[node], v);
        push(node, start, end);
        return;
    }
    int mid = start + (end - start) / 2;
    upd(node * 2 + 1, start, mid, l, r, v);
    upd(node * 2 + 2, mid + 1, end, l, r, v);
    seg[node] = min(seg[node * 2 + 1], seg[node * 2 + 2]);
}
int query(int node, int start, int end, int l, int r){
    push(node, start, end);
    if(start > r || end < l) return INF;
    if(start >= l && end <= r) return seg[node];
    int mid = start + (end - start) / 2;
    return min(query(node * 2 + 1, start, mid, l, r), query(node * 2 + 2, mid + 1, end, l, r));
}
signed main(){
    ios_base::sync_with_stdio(0);
    cin.tie(nullptr); cout.tie(nullptr);
    int n, m, q, l, r;
    cin >> n >> m >> q;
    vector<bool> ok(q + 1, 0);
    map<int, vector<int>> range;
    map<int, vector<pair<int, int>>> queries;
    for(int i = 1; i <= m; ++i){
        cin >> l >> r;
        range[r].push_back(l);
    }
    for(int i = 1; i <= q; ++i){
        cin >> l >> r;
        queries[r].push_back({l, i});
    }
    for(int i = 1; i <= n; ++i){
        for(auto it : range[i]) upd(0, 1, n, it, i, it);
        for(auto it : queries[i]){
            ok[it.second] = (query(0, 1, n, it.first, i) == it.first);
        }
    }
    for(int i = 1; i <= q; ++i){
        if(ok[i]) cout << "YES\n";
        else cout << "NO\n";
    }
    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...