Submission #1358471

#TimeUsernameProblemLanguageResultExecution timeMemory
1358471nathako9nAlternating Heights (CCO22_day1problem1)C++20
25 / 25
611 ms4504 KiB
#include <bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
#define endl '\n'
#define ll long long

using namespace std;
using namespace __gnu_pbds;
const int N = 3005;
int n,m,k,ans[N+3],ar[N+3],col[N+3];
vector<int>vec[N+3];

bool sol(int cur){
    col[cur] = 1;
    for(auto nx : vec[cur]){
        if(col[nx] == 0){
            if(!sol(nx)) return 0;
        }
        else if(col[nx] == 1){
            return 0;
        }
    }
    col[cur] = 2;
    return 1;
}

bool ch(int l,int mid){
    for(int i=1;i<=n;i++){
        if(vec[i].size())vec[i].clear();
        col[i]=0;
    }
    for(int i=l;i<mid;i++){
        if((i-l+1)%2==1){
            vec[ar[i+1]].emplace_back(ar[i]);
        }
        else{
            vec[ar[i]].emplace_back(ar[i+1]);
        }
    }
    for(int i=1;i<=n;i++){
        if(col[i]==0&&vec[i].size()){
            if(!sol(i))return 0;

        }
    }
    return 1;
}
int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cin>>n>>m>>k;
    for(int i=1;i<=n;i++){
        cin>>ar[i];
    }
    for(int i=1;i<=n;i++){
        int l=i,r=n;
        while(l<=r){
            int mid=l+(r-l)/2;
            if(ch(i,mid)){
                ans[i]=mid;
                l=mid+1;
            }
            else r=mid-1;
            //++ans[i];
        }
    }

    while(k--){
        int l,r;cin>>l>>r;
        if(r<=ans[l]){
            cout<<"YES";
        }
        else cout<<"NO";
        cout<<endl;
    }
    cout<<endl;
    for(int i=1;i<=n;i++){
       // cout<<i<<" "<<ans[i]<<endl;
    }

    return 0;
}
/*



6 3 3
1 1 2 3 1 2
1 2
2 5
2 6

*/
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...