제출 #1185388

#제출 시각아이디문제언어결과실행 시간메모리
1185388NotLinuxCurtains (NOI23_curtains)C++20
0 / 100
8 ms16076 KiB
#include <bits/stdc++.h>
using namespace std;
#define sz(x) (int)x.size()
#define all(x) x.begin() , x.end()
const int N = 5e5 + 7;
const int inf = 1e2 + 7;
vector<int>tree(4*N,inf),lazy(4*N,inf);
void push(int ind , int l , int r){
	if(lazy[ind] != inf){
		tree[ind] = min(tree[ind] , lazy[ind]);
		if(l != r){
			lazy[ind*2] = min(lazy[ind*2] , lazy[ind]);
			lazy[ind*2+1] = min(lazy[ind*2+1] , lazy[ind]);
		}
		lazy[ind] = inf;
	}
}
void chmin(int ql , int qr , int qv , int ind=1 , int l=0 , int r=N-1){
	push(ind,l,r);
	if(l >= ql and r <= qr){
		lazy[ind] = qv;
		push(ind,l,r);
		return;
	}
	else if(l > qr or r < ql)return;
	int mid = (l + r) / 2;
	chmin(ql,qr,qv,ind*2,l,mid);
	chmin(ql,qr,qv,ind*2+1,mid+1,r);
	tree[ind] = max(tree[ind*2] , tree[ind*2+1]);
}
int querymax(int ql , int qr , int ind=1 , int l=0 , int r=N-1){
	push(ind,l,r);
	if(l >= ql and r <= qr)return tree[ind];
	else if(l > qr or r < ql)return -inf;
	int mid = (l + r) / 2;
	return max(querymax(ql,qr,ind*2,l,mid) , querymax(ql,qr,ind*2+1,mid+1,r));
}
void solve(){
    int n,m,q;
    cin >> n >> m >> q;
    pair<int,int>ran[m];
    for(int i = 0;i<m;i++){
    	cin >> ran[i].first >> ran[i].second;
    	ran[i].first--;
    	ran[i].second--;
    }
    array<int,3>query[q];
    for(int i = 0;i<q;i++){
    	cin >> query[i][0] >> query[i][1];
    	query[i][0]--;
    	query[i][1]--;
    	query[i][2] = i;
    }
    sort(ran , ran + m);
    sort(query , query + q);
    int ptr0 = m-1 , ptr1 = q-1 , ans[q];
    for(int i = n-1;i>=0;i--){
    	while(ptr0>=0 and ran[ptr0].first >= i){
    		chmin(ran[ptr0].first , ran[ptr0].second , ran[ptr0].second);
    		ptr0--;
    	}
    	while(ptr1>=0 and query[ptr1][0] >= i){
    		ans[query[ptr1][2]] = querymax(query[ptr1][0] , query[ptr1][1]) <= query[ptr1][1];
    		ptr1--;
    	}
    }
    for(int i = 0;i<q;i++)
    	cout << (ans[i] ? "YES" : "NO") << '\n';
   	cout << endl;
}
signed main(){
	ios_base::sync_with_stdio(0);cin.tie(0);
	int testcase=1;//cin >> testcase;
	while(testcase--)solve();
	cerr << 1000.0 * clock() / CLOCKS_PER_SEC << " ms" << endl;
}
#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...