Submission #1200473

#TimeUsernameProblemLanguageResultExecution timeMemory
1200473_rain_Alternating Heights (CCO22_day1problem1)C++20
25 / 25
769 ms4560 KiB
#include<bits/stdc++.h> using namespace std; typedef long long LL; const int N=(int)3000; vector<int>ke[N+2]; int vis[N+2]={}; int n,k,q; int a[N+2]={},ans[N+2]={}; void add_canh(int u,int v){ ke[u].push_back(v); } void reset(){ for(int i=1;i<=k;++i) ke[i].clear(); for(int i=1;i<=k;++i) vis[i]=0; return; } bool dfs(int u){ vis[u]=1; for(auto&v:ke[u]){ if (vis[v]==0) { if (dfs(v)) return true; } else if (vis[v]==1) return true; } vis[u]=2; return false; } bool possible(int l,int r){ if (l==r) return true; reset(); int turn = 0; for(int i=l;i<r;++i){ if (turn==0) add_canh(a[i],a[i+1]); else add_canh(a[i+1],a[i]); turn=!turn; } for(int i=1;i<=k;++i) { if (vis[i]==0 && dfs(i)) return false; } return true; } int main(){ ios::sync_with_stdio(false); cin.tie(0) ; cout.tie(0); // freopen("main.inp","r",stdin); cin>>n>>k>>q; for(int i=1;i<=n;++i) cin>>a[i]; for(int i=1;i<=n;++i){ int low=i,high=n; while (low<=high){ int mid=(low+high)/2; if (possible(i,mid)){ ans[i]=mid; low=mid+1; } else high=mid-1; } } while(q--){ int l,r; cin>>l>>r; if (ans[l]>=r){ 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...