Submission #1358838

#TimeUsernameProblemLanguageResultExecution timeMemory
1358838namhhAlternating Heights (CCO22_day1problem1)C++20
25 / 25
675 ms4488 KiB
#include<bits/stdc++.h>
using namespace std;
#define pii pair<int,int>
#define fi first
#define se second
const int N = 3e5+5;
int n,k,q,a[N],val[N],vis[N];
vector<int>adj[N];
bool cycle;
void dmm(int u){
	vis[u] = 1;
	for(int v: adj[u]){
		if(!vis[v]) dmm(v);
		else if(vis[v] == 1){
			cycle = true;
			break;
		}
	}
	vis[u] = 2;
}
signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cin >> n >> k >> q;
    for(int i = 1; i <= n; i++) cin >> a[i];
    for(int i = 1; i <= n; i++){
    	int l = i;
    	int r = n;
    	while(l <= r){
    		int mid = (l+r)/2;
    		for(int i = 1; i <= k; i++) adj[i].clear();
    		for(int j = i; j <= mid-1; j++){
    			if((j-i) % 2 == 0) adj[a[j]].push_back(a[j+1]);
    			else adj[a[j+1]].push_back(a[j]);
			}
			cycle = false;
			for(int i = 1; i <= k; i++) vis[i] = 0;
			for(int i = 1; i <= k; i++){
				if(!vis[i]) dmm(i);
				if(cycle) break;
			}
			if(cycle) r = mid-1;
			else{
				val[i] = mid;
				l = mid+1;
			}
		}
	}
	while(q--){
		int l,r;
		cin >> l >> r;
		if(val[l] >= r) cout << "YES" << "\n";
		else cout << "NO" << "\n";
	}
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...