Submission #1247635

#TimeUsernameProblemLanguageResultExecution timeMemory
1247635huydayyAlternating Heights (CCO22_day1problem1)C++20
4 / 25
112 ms4400 KiB
#include <bits/stdc++.h>
using namespace std;

#define MAXN 200005

int n, k, q;
int a[MAXN];
int ans[MAXN];

void solve() {
    static int in[55], tmp[55];
    static vector<int> adj[55];

    int l = 1;
    while (l <= n) {
        int r = l, turn = 0;
        for (int i = 1; i <= k; ++i) adj[i].clear(), in[i] = 0;

        while (r < n) {
            int u = a[r], v = a[r + 1];
            if (u == v) break;

            if (turn == 0) {
                adj[u].push_back(v);
                in[v]++;
            } else {
                adj[v].push_back(u);
                in[u]++;
            }
            turn ^= 1;

            queue<int> q;
            for (int i = 1; i <= k; ++i) tmp[i] = in[i];
            for (int i = 1; i <= k; ++i)
                if (tmp[i] == 0) q.push(i);

            int cnt = 0;
            while (!q.empty()) {
                int u = q.front(); q.pop();
                cnt++;
                for (int v : adj[u]) {
                    if (--tmp[v] == 0) q.push(v);
                }
            }

            if (cnt < k) break; 
            r++;
        }

        for (int i = l; i <= r; ++i) ans[i] = r;
        l = r + 1;
    }

    while (q--) {
        int x, y;
        cin >> x >> y;
        cout << (ans[x] >= y ? "YES" : "NO") << '\n';
    }
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);

    cin >> n >> k >> q;
    for (int i = 1; i <= n; ++i) cin >> a[i];

    solve();
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...