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;
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
vector<int> adj[3005];
bool cyc=false;
bitset<3005> v,isdoing;
void dfs(int x){
v[x]=1;
isdoing[x]=1;
for(int i:adj[x]){
if(isdoing[i]) cyc=true;
else if(!v[i]) dfs(i);
}
isdoing[x]=0;
}
int 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;
bool ev=0;
for(int j=0; j<=k; j++){
adj[j].clear();
}
v.reset();
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++){
if(!v[arr[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 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... |