Submission #698398

#TimeUsernameProblemLanguageResultExecution timeMemory
698398emptypringlescanAlternating Heights (CCO22_day1problem1)C++14
10 / 25
1014 ms4552 KiB
#include <bits/stdc++.h>
using namespace std;
vector<int> adj[3005];
bool cyc=false,v[3005],isdoing[3005];
void dfs(int x){
	if(isdoing[x]) cyc=true;
	if(v[x]) return;
	v[x]=1;
	
	isdoing[x]=1;
	for(int i:adj[x]) dfs(i);
	isdoing[x]=0;
}
int32_t main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	int n,k,q;
	cin >> n >> k >> q;
	int arr[n];
	for(int i=0; i<n; i++) cin >> arr[i];
	int prec[n];
	for(int i=0; i<n; i++){
		int lo=i,hi=n-1,mid;
		while(lo<hi){
			mid=(lo+hi+1)/2;
			int ev=0;
			for(int j=0; j<=k; j++){
				adj[j].clear();
				v[j]=0;
				isdoing[j]=0;
			}
			for(int j=i+1; j<=mid; j++){
				if(ev){
					adj[arr[j]].push_back(arr[j-1]);
				}
				else{
					adj[arr[j-1]].push_back(arr[j]);
				}
				ev^=1;
			}
			cyc=false;
			for(int j=i; j<=mid; j++){
				dfs(arr[j]);
			}
			//cout << i << ' ' << mid << ' ' << cyc << ' ' << found << '\n';
			if(cyc){
				hi=mid-1;
			}
			else lo=mid;
		}
		prec[i]=lo;
		//cout << lo << ' ';
	}
	for(int i=0; i<q; i++){
		int a,b;
		cin >> a >> b;
		a--; b--;
		if(b<=prec[a]) 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...