Submission details
Task:Frontier
Sender:Naming is (NP) Hard
Submission time:2025-11-08 16:04:24 +0200
Language:C++ (C++20)
Status:READY
Result:ACCEPTED
Test results
testverdicttime
#1ACCEPTED0.00 sdetails
#2ACCEPTED0.00 sdetails
#3ACCEPTED0.00 sdetails
#4ACCEPTED0.00 sdetails
#5ACCEPTED0.00 sdetails
#6ACCEPTED0.00 sdetails
#7ACCEPTED0.00 sdetails
#8ACCEPTED0.00 sdetails
#9ACCEPTED0.00 sdetails
#10ACCEPTED0.00 sdetails
#11ACCEPTED0.00 sdetails
#12ACCEPTED0.00 sdetails
#13ACCEPTED0.00 sdetails
#14ACCEPTED0.00 sdetails
#15ACCEPTED0.00 sdetails
#16ACCEPTED0.00 sdetails
#17ACCEPTED0.01 sdetails
#18ACCEPTED0.04 sdetails
#19ACCEPTED0.04 sdetails

Code

#include <bits/stdc++.h>
using namespace std;

#ifdef LOCAL
#define D(x) {x;}
#else
#define D(x)
#endif
#define rep(i, a, b) for(int i = a; i < (b); ++i)
#define all(x) begin(x),end(x)
#define sz(x) (int) (x).size()
using ll = long long;
using pii = pair<int, int>;
using vi = vector<int>;

int main() {
    cin.tie(0) -> sync_with_stdio(0);
    cin.exceptions(cin.failbit);

    int n, s;
    cin >> n >> s;

    vector<vector<int>> id(s+1);
    for (int i = 0; i < n; ++i) {
        int x;
        cin >> x;
        id[x].push_back(i);
    }

    if (n == 1) {
        cout << "NO\n";
        return 0;
    }

    for (int i = 1; i <= s; ++i) {
        if (id[i].size() == 0) continue;
        int a = id[i][0];
        int b = id[i].back();
        for (int j = 1; j <= s; ++j) if (i != j) {
            auto it = lower_bound(all(id[j]), a);
            if (it != id[j].end()) {
                int c = *it;
                it = lower_bound(all(id[j]), b);
                if (it != id[j].begin()) {
                    --it;
                    int d = *it;
                    it = lower_bound(all(id[i]), c);
                    if (it != id[i].end()) {
                        if (c < *it && *it < d) {
                            cout << "NO\n";
                            return 0;
                        }
                    }
                }
            }
        }
        auto it = lower_bound(all(id[0]), a);
        if (it != id[0].end()) {
            if (a < *it && *it < b) {
                cout << "NO\n";
                return 0;
            }
        }
    }

    cout << "YES\n";
}

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