제출 #1339759

#제출 시각아이디문제언어결과실행 시간메모리
1339759053thousandAlternating Heights (CCO22_day1problem1)C++20
0 / 25
1048 ms10468 KiB
#include<bits/stdc++.h>
using namespace std;
#define int long long
	int a,b,c,d[3005],e,f;
	vector<int>v[3005];
	bool ca[3005][3005];
	bool aa[3005][2]={0};
bool dfs(int x){
//	cout<<x<<endl;
	aa[x][1]=1;
	for(int i=0;i<v[x].size();i++){
		if(aa[v[x][i]][1]==1) return 0;
		if(aa[v[x][i]][0]==0){
			if(dfs(v[x][i])==0) return 0;
		}
	}
	aa[x][0]=1;
	aa[x][1]=0;
	return 1;
}
bool che(int x,int y){
	for(int i=0;i<=b;i++) v[i].clear(),aa[i][0]=0,aa[i][1]=0;
	for(int i=x;i<=y;i++){
		if(i%2==0){
			if(i-1>=x){	v[d[i]].push_back(d[i-1]);
			}
			if(i+1<=y)v[d[i]].push_back(d[i+1]);
			
		}
	}
	for(int i=1;i<=b;i++){
		if(aa[i][0]==0){
			if(dfs(i)==0) return 0;
		}
	}
	return 1;
}
signed main(){
	cin>>a>>b>>c;
	cin>>d[0];
	for(int i=1;i<a;i++) {
		cin>>d[i];
	}
	for(int i=0;i<a;i++){
		int l=i+1,r=a-1;
		while(l<r){
			int m=(l+r)/2;
			if(che(i,m)==0){
				r=m;
			}
			else l=m+1;
		}
		for(int h=i+1;h<l;h++){
			ca[i][h]=1;
		}
	}
//	for(int i=0;i<a;i++){
//		for(int h=i+1;h<a;h++){
//			cout<<ca[i][h];
//		}
//		cout<<endl;
//	}
	for(int i=0;i<c;i++){
		cin>>e>>f;
		e--;
		f--;
		if(f>e) swap(e,f);
		if(ca[f][e]) 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...