Submission #954005

#TimeUsernameProblemLanguageResultExecution timeMemory
954005thiago_bastosAlternating Heights (CCO22_day1problem1)C++17
25 / 25
251 ms11960 KiB
#include <bits/stdc++.h>

using namespace std;

const int N = 3e3 + 10;

int n, k, q, a[N], last[N], deg[N];
vector<int> adj[N];

bool is_dag(int l, int r) {
    queue<int> q;
    int count = 0;

    for(int i = 0; i < n; ++i) {
        deg[i] = 0;
        adj[i].clear();
    }

    for(int i = l + 1; i <= r; ++i) {
        if((i - l) % 2) {
            ++deg[a[i - 1]];
            adj[a[i]].push_back(a[i - 1]);
        } else {
            ++deg[a[i]];
            adj[a[i - 1]].push_back(a[i]);
        }
    }
    for(int i = 0; i < n; ++i) {    
        if(!deg[i]) {
            if(adj[i].size())
                q.push(i);
       } else
            ++count;
    }

    while(!q.empty()) {
        int u = q.front(); q.pop();

        for(int v : adj[u]) {
            if(--deg[v] == 0) {
                --count;
                q.push(v);
            }
        }
    }
    return count == 0;
}

void solve() {

    cin >> n >> k >> q;

    for(int i = 0; i < n; ++i) {cin >> a[i]; --a[i];}
    
    last[n - 1] = n - 1;

    for(int i = n - 2; i >= 0; --i) {
        last[i] = last[i + 1];
        while(!is_dag(i, last[i])) --last[i];
    }

    while(q--) {
        int l, r;
        cin >> l >> r;
        --l, --r;
        cout << (last[l] >= r ? "YES\n" : "NO\n");
    }
}

int main() {
    int t = 1;
    ios_base :: sync_with_stdio(false);
    cin.tie(0);
    //cin >> t;
    while(t--) solve();
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...