Submission details
Task:Ryhmät
Sender:jhuun
Submission time:2025-09-28 22:57:12 +0300
Language:C++ (C++20)
Status:READY
Result:0
Feedback
groupverdictscore
#10
#20
#30
Test results
testverdicttimegroup
#10.01 s1, 2, 3details
#20.01 s1, 2, 3details
#3ACCEPTED0.01 s1, 2, 3details
#4ACCEPTED0.01 s1, 2, 3details
#5ACCEPTED0.01 s1, 2, 3details
#60.67 s2details
#70.27 s2details
#8--2details
#9--2, 3details
#100.39 s3details
#110.39 s3details
#120.39 s3details
#130.39 s3details
#140.39 s3details
#150.39 s3details
#160.39 s3details

Code

#include <bits/stdc++.h>

using pi = std::pair<int, int>;

bool k_check(const std::vector<pi>& Kp, const std::vector<int64_t>& R1, const std::vector<std::vector<int>>& R) {
    for (std::size_t i = 0; i < Kp.size(); ++i) {
        const auto ki = Kp[i].first;
        for (std::size_t j = i; j < Kp.size(); ++j) {
            const auto kj = Kp[j].first;
            if (R[ki][kj] < R1[kj] - (ki > 0 ? R1[ki - 1] : 0)) {
                return false;
            }
        }
    }
    return true;
}

bool solve(const std::vector<pi>& N, const std::vector<pi>& Kp) {
    std::vector<bool> used(N.size());
    std::size_t Ni = 0;
    for (const auto& [k, c] : Kp) {
        while (!(N[Ni].first <= k && N[Ni].second >= k)) {
            ++Ni;
        }
        for (int cc = c; cc > 0; ) {
            std::size_t bi = std::numeric_limits<int>::max();
            int bb = std::numeric_limits<int>::max();
            for (auto i = Ni; i < N.size(); ++i) {
                if (used[i]) continue;
                const auto [a, b] = N[i];
                if (a > k || b < k) {
                    break;
                }
                if (b < bb) {
                    bi = i;
                    bb = b;
                }
            }
            if (bi == std::numeric_limits<int>::max()) return false;
            used[bi] = true;
            --cc;
        }
    }
    std::cout << "YES\n";
    return true;
}

int main() {
    int n, t;
    std::cin >> n >> t;
    std::vector<pi> N;
    std::vector<std::vector<int>> D(n + 1, std::vector<int>(n + 1));
    for (int i = 0; i < n; ++i) {
        int a, b;
        std::cin >> a >> b;
        --a;
        --b;
        N.emplace_back(a, b);
        ++D[0][a];
        --D[b + 1][a];
        --D[0][n];
        ++D[b + 1][n];
    }
    std::sort(N.begin(), N.end());
    std::vector<std::vector<int>> R(n + 1, std::vector<int>(n + 1));
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < n; ++j) {
            R[i][j] = D[i][j];
            if (i > 0) {
                R[i][j] += R[i - 1][j];
            }
            if (j > 0) {
                R[i][j] += R[i][j - 1];
            }
            if (i > 0 && j > 0) {
                R[i][j] -= R[i - 1][j - 1];
            }
        }
    }
    for (int i = 0; i < t; ++i) {
        int m;
        std::cin >> m;
        std::vector<int> K(m);
        int ks = 0;
        for (auto& k : K) {
            std::cin >> k;
            ks += k;
        }
        if (ks > n) {
            std::cout << "NO\n";
            continue;
        }
        std::sort(K.begin(), K.end());
        std::vector<pi> Kp{{K.front() - 1, K.front()}};
        for (auto j = 1; j < m; ++j) {
            if (K[j] == K[j - 1] - 1) {
                Kp.back().second += K[j];
            } else {
                Kp.emplace_back(K[j] - 1, K[j]);
            }
        }
        std::vector<int64_t> R1(n);
        for (const auto& [k, c] : Kp) {
            R1[k] = c;
        }
        for (int i = 1; i < n; ++i) {
            R1[i] += R1[i - 1];
        }
        if (!k_check(Kp, R1, R)) {
            std::cout << "NO\n";
            continue;
        }
        if (!solve(N, Kp)) {
            std::cout << "NO\n";
        }
    }
}

Test details

Test 1

Group: 1, 2, 3

Verdict:

input
100 100
10 10
10 10
6 9
6 8
...

correct output
YES
YES
YES
NO
YES
...

user output
NO
YES
NO
NO
YES
...

Test 2

Group: 1, 2, 3

Verdict:

input
100 100
9 9
6 10
8 10
8 8
...

correct output
NO
YES
NO
YES
NO
...

user output
NO
YES
NO
NO
NO
...

Test 3

Group: 1, 2, 3

Verdict: ACCEPTED

input
100 100
1 1
1 1
1 1
1 1
...

correct output
YES
YES
YES
YES
YES
...

user output
YES
YES
YES
YES
YES
...

Test 4

Group: 1, 2, 3

Verdict: ACCEPTED

input
100 100
100 100
100 100
100 100
100 100
...

correct output
YES
YES
YES
YES
YES
...

user output
YES
YES
YES
YES
YES
...

Test 5

Group: 1, 2, 3

Verdict: ACCEPTED

input
100 100
4 9
3 8
7 9
7 9
...

correct output
NO
NO
NO
NO
NO
...

user output
NO
NO
NO
NO
NO
...

Test 6

Group: 2

Verdict:

input
1000 1000
9 10
2 5
10 10
5 5
...

correct output
YES
YES
YES
YES
NO
...

user output
NO
NO
NO
YES
NO
...

Test 7

Group: 2

Verdict:

input
1000 1000
5 7
9 9
3 7
8 10
...

correct output
YES
NO
NO
YES
YES
...

user output
YES
NO
NO
NO
NO
...

Test 8

Group: 2

Verdict:

input
1000 1000
1 1
1 1
1 1
1 1
...

correct output
YES
YES
YES
YES
YES
...

user output
(empty)

Test 9

Group: 2, 3

Verdict:

input
1000 1000
1000 1000
1000 1000
1000 1000
1000 1000
...

correct output
YES
YES
YES
YES
YES
...

user output
(empty)

Test 10

Group: 3

Verdict:

input
100000 1000
774 778
363 852
309 668
261 459
...

correct output
YES
YES
YES
YES
YES
...

user output
(empty)

Test 11

Group: 3

Verdict:

input
100000 1000
1233 1914
901 3963
1277 4293
1083 1599
...

correct output
NO
NO
YES
NO
NO
...

user output
(empty)

Test 12

Group: 3

Verdict:

input
100000 1000
1970 8631
4606 5797
6317 8162
8204 8789
...

correct output
NO
NO
NO
NO
NO
...

user output
(empty)

Test 13

Group: 3

Verdict:

input
100000 1000
1000 1000
1000 1000
1000 1000
1000 1000
...

correct output
YES
YES
YES
YES
YES
...

user output
(empty)

Test 14

Group: 3

Verdict:

input
100000 100000
1 100000
1 100000
1 100000
1 100000
...

correct output
YES
YES
YES
YES
YES
...

user output
(empty)

Test 15

Group: 3

Verdict:

input
100000 100000
80971 98445
93046 96043
74840 94035
95931 96609
...

correct output
NO
NO
NO
NO
NO
...

user output
(empty)

Test 16

Group: 3

Verdict:

input
100000 10000
6481 14350
69129 87600
6217 16462
4387 16625
...

correct output
YES
YES
YES
YES
YES
...

user output
(empty)