Submission #966888

#TimeUsernameProblemLanguageResultExecution timeMemory
966888JomnoiAlternating Heights (CCO22_day1problem1)C++17
25 / 25
743 ms13940 KiB
#include <bits/stdc++.h> using namespace std; const int MAX_N = 3005; int A[MAX_N], fur[MAX_N]; vector <int> graph[MAX_N]; int visited[MAX_N]; bool dfs(int u) { if (visited[u] == 2) return true; if (visited[u] == 1) return false; visited[u] = 1; for (auto v : graph[u]) { if (dfs(v) == false) return false; } visited[u] = 2; return true; } int main() { cin.tie(nullptr)->sync_with_stdio(false); int N, K, Q; cin >> N >> K >> Q; for (int i = 1; i <= N; i++) cin >> A[i]; for (int i = 1; i <= N; i++) { int l = i, r = N; while (l <= r) { int mid = (l + r) / 2; for (int j = 1; j <= K; j++) { visited[j] = 0; graph[j].clear(); } for (int j = i + 1; j <= mid; j++) { if (j % 2 == 1) graph[A[j]].push_back(A[j - 1]); else graph[A[j - 1]].push_back(A[j]); } bool ok = true; for (int j = 1; j <= K; j++) { if (visited[j] == 0 and dfs(j) == false) ok = false; } if (ok == true) l = mid + 1, fur[i] = mid; else r = mid - 1; } } while (Q--) { int x, y; cin >> x >> y; if (fur[x] >= y) cout << "YES\n"; else cout << "NO\n"; } 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...