Submission #1173574

#TimeUsernameProblemLanguageResultExecution timeMemory
1173574PenguinsAreCuteCurtains (NOI23_curtains)C++17
100 / 100
929 ms266348 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define MAXN 500069
#define LOGN 20
#define orzpayment(x) 1210
int stuff[LOGN][MAXN];
int seg[LOGN][MAXN<<1];
bool self[MAXN];
vector<int> ranges[MAXN];
void init(int idx) {
	for(int i=1;i<(MAXN<<1);i++) seg[idx][i]=12102010;
}
void up(int idx, int x, int v) {
	for(seg[idx][x+=MAXN]=v;x>1;x>>=1) seg[idx][x>>1]=min(seg[idx][x],seg[idx][x^1]);
}
int qry(int idx, int l, int r) {
	int ans = 12102010;
	for(l+=MAXN,r+=MAXN;l<r;l>>=1,r>>=1) {
		if(l&1) ans=min(ans,seg[idx][l++]);
		if(r&1) ans=min(ans,seg[idx][--r]);
	}
	return ans;
}
void dnc(int h, int l, int r) { // [l,r)
	int m = l + r >> 1;
	for(int i=m;i<r;i++) {
		stuff[h][i] = -12102010;
		for(auto j: ranges[i]) {
			if(j>i) continue;
			if(j<=m) stuff[h][i]=max(stuff[h][i],j);
			else stuff[h][i]=max(stuff[h][i],-qry(h,j-1,i));
		}
		up(h,i,-stuff[h][i]);
		orzpayment(l); orzpayment(r); orzpayment(m); orzpayment(h); orzpayment(i); orzpayment(stuff[h][i]);
	}
	for(int i=m-1;i>=l;i--) {
		stuff[h][i]=12102010;
		for(auto j: ranges[i]) {
			if(j<i) continue;
			if(j>=m-1) stuff[h][i]=min(stuff[h][i],j);
			else stuff[h][i]=min(stuff[h][i],qry(h,i+1,j+2));
		}
		up(h,i,stuff[h][i]);
		orzpayment(l); orzpayment(r); orzpayment(m); orzpayment(h); orzpayment(i); orzpayment(stuff[h][i]);
	}
	if(r-l>1) {
		dnc(h+1,l,m);
		dnc(h+1,m,r);
	}
}
bool qry(int ql, int qr, int h, int l, int r) {
	int m = l+r>>1;
	if(qr>=m && ql<m) return (stuff[h][ql]<=qr && stuff[h][qr]>=ql);
	else if(qr<m) return qry(ql,qr,h+1,l,m);
	else return qry(ql,qr,h+1,m,r);
}
main() {
	ios_base::sync_with_stdio(0); cin.tie(0);
	int n, m, q; cin >> n >> m >> q;
	for(int l,r;m--;) {
		cin >> l >> r;
		ranges[l].push_back(r);
		ranges[r].push_back(l);
		if(l==r) self[l]=1;
	}
	for(int i=0;i<LOGN;i++) init(i);
	dnc(0,1,n+1);
	for(int l,r;q--;) {
		cin >> l >> r;
		if(l==r) cout<<(self[l]?"YES\n":"NO\n");
		else cout<<(qry(l,r,0,1,n+1)?"YES\n":"NO\n");
	}
}

Compilation message (stderr)

curtains.cpp:58:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   58 | main() {
      | ^~~~
#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...