This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |