Submission #851648

#TimeUsernameProblemLanguageResultExecution timeMemory
851648khanhphucscratchAlternating Heights (CCO22_day1problem1)C++14
25 / 25
247 ms9296 KiB
#include<bits/stdc++.h> using namespace std; vector<int> ad[3001]; int k, f[3001], a[3001], val[3001], state[3001]; bool ok = 1, exist[3001]; void dfs(int u) { state[u] = 1; for(int v : ad[u]) if(state[v] < 2){ if(state[v] == 1){ok = 0; return;} else{ dfs(v); if(ok == 0) return; } } state[u] = 2; } bool check(int l, int r) { for(int i = 1; i <= k; i++){ ad[i].clear(); f[i] = 0; state[i] = 0; exist[i] = 0; } for(int i = l; i <= r; i++){ exist[a[i]] = 1; if(i%2 == 1){ if(i-1 >= l){ ad[a[i]].push_back(a[i-1]); f[a[i-1]]++; } if(i+1 <= r){ ad[a[i]].push_back(a[i+1]); f[a[i+1]]++; } } } ok = 1; for(int i = 1; i <= k; i++) if(f[i] == 0){ dfs(i); if(ok == 0) return 0; } for(int i = 1; i <= k; i++) if(exist[i] == 1 && state[i] == 0) return 0; return ok; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); int n, q; cin>>n>>k>>q; map<pair<int, int>, int> f; for(int i = 1; i <= n; i++) cin>>a[i]; int j = 1; for(int i = 1; i <= n; i++){ while(j <= n && check(i, j) == 1) j++; val[i] = j; } for(int i = 1; i <= q; i++){ int l, r; cin>>l>>r; if(val[l] <= r) cout<<"NO"<<'\n'; else cout<<"YES"<<'\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...