Submission #891075

#TimeUsernameProblemLanguageResultExecution timeMemory
891075pccAlternating Heights (CCO22_day1problem1)C++14
25 / 25
362 ms16468 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define pll pair<ll,ll> #define pii pair<int,int> #define fs first #define sc second #define tlll tuple<ll,ll,ll> const int mxn = 3030; deque<int> paths[mxn]; int deg[mxn],arr[mxn]; int n,m; int range[mxn]; queue<int> q; bool check(){ bool flag = false; fill(deg+1,deg+m+1,0); for(int i = 1;i<=m;i++){ for(auto nxt:paths[i])deg[nxt]++; } for(int i = 1;i<=m;i++)if(!deg[i])q.push(i); while(!q.empty()){ auto now = q.front(); q.pop(); for(auto nxt:paths[now]){ deg[nxt]--; if(!deg[nxt])q.push(nxt); } } if(*max_element(deg+1,deg+m+1) != 0)return false; else return true; } int main(){ ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); int q; cin>>n>>m>>q; for(int i = 1;i<=n;i++)cin>>arr[i]; range[n] = range[n+1] = range[n+2] = n; for(int i = n-2;i>=1;i-= 2){ int a = arr[i],b = arr[i+1],c = arr[i+2]; paths[c].push_front(b); paths[a].push_front(b); range[i] = range[i+2]; while(!check()){ a = arr[range[i]-1]; b = arr[range[i]]; if((range[i]-i)&1){ paths[a].pop_back(); } else{ paths[b].pop_back(); } range[i]--; } } for(auto &i:paths)i.clear(); range[n-1] = n-(arr[n] == arr[n-1]); if(range[n-1] == n)paths[arr[n-1]].push_back(arr[n]); /* cout<<"HI"<<endl; for(int i = 1;i<=n;i++){ for(auto &j:paths[i])cout<<i<<','<<j<<endl; }cout<<endl; */ for(int i = n-3;i>=1;i-=2){ //cout<<i<<endl; int a = arr[i],b = arr[i+1],c = arr[i+2]; paths[c].push_front(b); paths[a].push_front(b); range[i] = range[i+2]; while(!check()){ a = arr[range[i]-1],b = arr[range[i]]; if((range[i]-i)&1){ assert(!paths[a].empty()); paths[a].pop_back(); } else{ assert(!paths[b].empty()); paths[b].pop_back(); } range[i]--; } /* cout<<i<<" "<<range[i]<<":"<<endl; for(int i = 1;i<=m;i++){ for(auto nxt:paths[i])cout<<i<<','<<nxt<<endl; } cout<<endl; */ } while(q--){ int l,r; cin>>l>>r; if(range[l]>=r)cout<<"YES\n"; else cout<<"NO\n"; } return 0; }

Compilation message (stderr)

Main.cpp: In function 'bool check()':
Main.cpp:20:7: warning: unused variable 'flag' [-Wunused-variable]
   20 |  bool flag = false;
      |       ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...