| Task: | Frontier |
| Sender: | Aalto CS-A1140 Team 2 |
| Submission time: | 2025-11-08 15:49:11 +0200 |
| Language: | C++ (C++17) |
| Status: | READY |
| Result: | ACCEPTED |
| test | verdict | time | |
|---|---|---|---|
| #1 | ACCEPTED | 0.00 s | details |
| #2 | ACCEPTED | 0.00 s | details |
| #3 | ACCEPTED | 0.00 s | details |
| #4 | ACCEPTED | 0.00 s | details |
| #5 | ACCEPTED | 0.00 s | details |
| #6 | ACCEPTED | 0.00 s | details |
| #7 | ACCEPTED | 0.00 s | details |
| #8 | ACCEPTED | 0.00 s | details |
| #9 | ACCEPTED | 0.00 s | details |
| #10 | ACCEPTED | 0.00 s | details |
| #11 | ACCEPTED | 0.00 s | details |
| #12 | ACCEPTED | 0.00 s | details |
| #13 | ACCEPTED | 0.00 s | details |
| #14 | ACCEPTED | 0.00 s | details |
| #15 | ACCEPTED | 0.00 s | details |
| #16 | ACCEPTED | 0.00 s | details |
| #17 | ACCEPTED | 0.01 s | details |
| #18 | ACCEPTED | 0.02 s | details |
| #19 | ACCEPTED | 0.02 s | details |
Compiler report
input/code.cpp: In function 'int main()':
input/code.cpp:83:29: warning: unused variable 'sl' [-Wunused-variable]
83 | int sl = l;
| ^~
input/code.cpp:87:29: warning: unused variable 'er' [-Wunused-variable]
87 | int er = r;
| ^~Code
#include <bits/stdc++.h>
using namespace std;
void fail() {
cout << "NO" << endl;
exit(0);
}
using vi = vector<int>;
#define all(x) x.begin(), x.end()
#define sz(x) (int)(x).size()
#define rep(i, a, b) for (int i = a; i < (b); ++i)
vi topoSort(const vector<vi>& gr) {
vi indeg(sz(gr)), ret;
for (auto& li : gr) for (int x : li) indeg[x]++;
queue<int> q;
rep(i, 0, sz(gr)) if (indeg[i] == 0) q.push(i);
while (!q.empty()) {
int i = q.front();
ret.push_back(i);
q.pop();
for (int x : gr[i])
if (--indeg[x] == 0) q.push(x);
}
if (sz(ret) < sz(gr)) return {};
return ret;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, s;
cin >> n >> s;
s++;
vector<vector<int>> occ(s);
vector<int> v(n);
for (int i = 0; i < n; ++i) {
cin >> v[i];
occ[v[i]].push_back(i);
}
vector<vector<int>> g(s);
for (int i = 0; i < s; ++i) {
if (!occ[i].size()) continue;
for (int j = i + 1; j < s; ++j) {
if (!occ[j].size()) continue;
int min_i = occ[i].front();
int max_i = occ[i].back();
int min_j = occ[j].front();
int max_j = occ[j].back();
if (max_i < min_j) continue;
if (max_j < min_i) continue;
int l = max(min_i, min_j);
int r = min(max_i, max_j);
if (r < l) {
continue;
}
{
auto it = lower_bound(all(occ[i]), l);
if (it == end(occ[i]) || *it > r) continue;
}
{
auto it = lower_bound(all(occ[j]), l);
if (it == end(occ[j]) || *it > r) continue;
}
if (v[l] == v[r]) {
fail();
}
int sl = l;
int el = *prev(upper_bound(all(occ[v[l]]), r));
int sr = *lower_bound(all(occ[v[r]]), l);
int er = r;
if (el > sr) {
fail();
}
g[v[l]].push_back(v[l] == i ? j : i);
}
}
auto t = topoSort(g);
if (!t.size()) fail();
cout << "YES" << endl;
}
Test details
Test 1
Verdict: ACCEPTED
| input |
|---|
| 8 3 0 1 3 1 3 2 3 0 |
| correct output |
|---|
| YES |
| user output |
|---|
| YES |
Test 2
Verdict: ACCEPTED
| input |
|---|
| 3 1 0 1 0 |
| correct output |
|---|
| YES |
| user output |
|---|
| YES |
Test 3
Verdict: ACCEPTED
| input |
|---|
| 10 10 0 2 3 2 8 4 7 6 7 0 |
| correct output |
|---|
| YES |
| user output |
|---|
| YES |
Test 4
Verdict: ACCEPTED
| input |
|---|
| 18 100 0 95 64 79 64 68 64 88 58 88 8... |
| correct output |
|---|
| YES |
| user output |
|---|
| YES |
Test 5
Verdict: ACCEPTED
| input |
|---|
| 105 1000 0 110 123 192 371 192 94 192 3... |
| correct output |
|---|
| YES |
| user output |
|---|
| YES |
Test 6
Verdict: ACCEPTED
| input |
|---|
| 76 1000 0 615 320 101 56 683 391 350 3... |
| correct output |
|---|
| YES |
| user output |
|---|
| YES |
Test 7
Verdict: ACCEPTED
| input |
|---|
| 112 2000 0 116 1100 256 324 256 876 256... |
| correct output |
|---|
| YES |
| user output |
|---|
| YES |
Test 8
Verdict: ACCEPTED
| input |
|---|
| 115 2000 0 388 1955 1661 1417 1580 1053... |
| correct output |
|---|
| YES |
| user output |
|---|
| YES |
Test 9
Verdict: ACCEPTED
| input |
|---|
| 92 2000 0 309 838 1212 553 863 553 141... |
| correct output |
|---|
| YES |
| user output |
|---|
| YES |
Test 10
Verdict: ACCEPTED
| input |
|---|
| 18 10 0 3 4 10 9 4 2 8 6 8 2 7 2 9 1... |
| correct output |
|---|
| YES |
| user output |
|---|
| YES |
Test 11
Verdict: ACCEPTED
| input |
|---|
| 53 100 0 1 3 82 100 25 27 85 61 53 61... |
| correct output |
|---|
| NO |
| user output |
|---|
| NO |
Test 12
Verdict: ACCEPTED
| input |
|---|
| 94 1000 0 675 229 663 771 140 314 140 ... |
| correct output |
|---|
| YES |
| user output |
|---|
| YES |
Test 13
Verdict: ACCEPTED
| input |
|---|
| 110 1000 0 493 827 157 538 946 1 736 31... |
| correct output |
|---|
| YES |
| user output |
|---|
| YES |
Test 14
Verdict: ACCEPTED
| input |
|---|
| 96 1000 0 206 843 543 401 819 800 444 ... |
| correct output |
|---|
| NO |
| user output |
|---|
| NO |
Test 15
Verdict: ACCEPTED
| input |
|---|
| 198 2000 0 1661 1800 19 1666 879 1021 9... |
| correct output |
|---|
| NO |
| user output |
|---|
| NO |
Test 16
Verdict: ACCEPTED
| input |
|---|
| 538 2000 0 1138 1562 1509 1339 735 1993... |
| correct output |
|---|
| NO |
| user output |
|---|
| NO |
Test 17
Verdict: ACCEPTED
| input |
|---|
| 98999 2000 0 1798 1467 884 1426 1191 601 ... |
| correct output |
|---|
| NO |
| user output |
|---|
| NO |
Test 18
Verdict: ACCEPTED
| input |
|---|
| 3373 2000 0 121 0 1094 0 58 0 306 0 1273... |
| correct output |
|---|
| YES |
| user output |
|---|
| YES |
Test 19
Verdict: ACCEPTED
| input |
|---|
| 3370 2000 0 1602 0 455 0 710 0 1514 0 84... |
| correct output |
|---|
| YES |
| user output |
|---|
| YES |
