Submission details
Task:Lista
Sender:zli0122
Submission time:2026-01-18 16:16:23 +0200
Language:C++ (C++11)
Status:READY
Result:100
Feedback
groupverdictscore
#1ACCEPTED7
#2ACCEPTED9
#3ACCEPTED12
#4ACCEPTED18
#5ACCEPTED23
#6ACCEPTED31
Test results
testverdicttimegroup
#1ACCEPTED0.00 s1, 3, 4, 5, 6details
#2ACCEPTED0.00 s1, 4, 5, 6details
#3ACCEPTED0.00 s1, 2, 4, 5, 6details
#4ACCEPTED0.00 s1, 2, 4, 5, 6details
#5ACCEPTED0.00 s1, 2, 4, 5, 6details
#6ACCEPTED0.00 s1, 3, 4, 5, 6details
#7ACCEPTED0.00 s1, 4, 5, 6details
#8ACCEPTED0.00 s1, 4, 5, 6details
#9ACCEPTED0.00 s1, 4, 5, 6details
#10ACCEPTED0.00 s1, 2, 4, 5, 6details
#11ACCEPTED0.00 s1, 4, 5, 6details
#12ACCEPTED0.00 s1, 4, 5, 6details
#13ACCEPTED0.00 s1, 4, 5, 6details
#14ACCEPTED0.11 s2, 6details
#15ACCEPTED0.12 s2, 6details
#16ACCEPTED0.14 s2, 6details
#17ACCEPTED0.26 s2, 6details
#18ACCEPTED0.15 s2, 6details
#19ACCEPTED0.15 s2, 6details
#20ACCEPTED0.00 s1, 3, 4, 5, 6details
#21ACCEPTED0.10 s3, 6details
#22ACCEPTED0.12 s3, 6details
#23ACCEPTED0.15 s3, 6details
#24ACCEPTED0.26 s3, 6details
#25ACCEPTED0.14 s3, 6details
#26ACCEPTED0.15 s3, 6details
#27ACCEPTED0.01 s4, 6details
#28ACCEPTED0.01 s4, 6details
#29ACCEPTED0.01 s4, 6details
#30ACCEPTED0.01 s2, 4, 6details
#31ACCEPTED0.01 s4, 6details
#32ACCEPTED0.01 s4, 6details
#33ACCEPTED0.07 s5, 6details
#34ACCEPTED0.08 s5, 6details
#35ACCEPTED0.06 s5, 6details
#36ACCEPTED0.06 s2, 5, 6details
#37ACCEPTED0.06 s5, 6details
#38ACCEPTED0.27 s6details
#39ACCEPTED0.31 s6details
#40ACCEPTED0.27 s6details
#41ACCEPTED0.06 s2, 5, 6details
#42ACCEPTED0.06 s5, 6details
#43ACCEPTED0.00 s1, 3, 4, 5, 6details
#44ACCEPTED0.00 s1, 2, 4, 5, 6details
#45ACCEPTED0.00 s1, 4, 5, 6details

Code

#include <bits/stdc++.h>

namespace {

class FrequencyBalancer {
public:
    FrequencyBalancer(const std::vector<int>& values) {
        max_value_ = 0;
        for (int v : values) {
            max_value_ = std::max(max_value_, v);
        }
        remaining_.assign(max_value_ + 2, 0);
        suffix_.assign(max_value_ + 2, 0);
        for (int v : values) {
            remaining_[v]++;
            suffix_[v]++;
        }
        match_total_ = 0;
        for (int v = 1; v <= max_value_; ++v) {
            match_total_ += std::min(remaining_[v], suffix_[v]);
            if (remaining_[v] > 0) {
                tight_.insert(v);
            }
        }
    }

    int max_value() const { return max_value_; }

    long long match_total() const { return match_total_; }

    int remaining(int v) const { return remaining_[v]; }

    int suffix(int v) const { return suffix_[v]; }

    const std::set<int>& more_values() const { return more_; }

    const std::set<int>& tight_values() const { return tight_; }

    void consume_suffix(int v) {
        if (v < 1 || v > max_value_) return;
        update_match(v, 0, -1);
        update_sets(v);
    }

    void consume_value(int v) {
        if (v < 1 || v > max_value_) return;
        update_match(v, -1, 0);
        update_sets(v);
    }

private:
    void update_match(int v, int delta_remaining, int delta_suffix) {
        match_total_ -= std::min(remaining_[v], suffix_[v]);
        remaining_[v] += delta_remaining;
        suffix_[v] += delta_suffix;
        match_total_ += std::min(remaining_[v], suffix_[v]);
    }

    void update_sets(int v) {
        if (v < 1 || v > max_value_) return;
        more_.erase(v);
        tight_.erase(v);
        if (remaining_[v] == 0) {
            return;
        }
        if (remaining_[v] > suffix_[v]) {
            more_.insert(v);
        } else {
            tight_.insert(v);
        }
    }

    int max_value_ = 0;
    std::vector<int> remaining_;
    std::vector<int> suffix_;
    long long match_total_ = 0;
    std::set<int> more_;
    std::set<int> tight_;
};

int extra_cost(const FrequencyBalancer& balancer, int candidate, int original) {
    if (candidate <= 0 || candidate > balancer.max_value() || balancer.remaining(candidate) == 0) {
        return std::numeric_limits<int>::max();
    }
    int extra = (candidate == original) ? 0 : 1;
    if (balancer.remaining(candidate) <= balancer.suffix(candidate)) {
        extra += 1;
    }
    return extra;
}

void consider_candidate(const FrequencyBalancer& balancer, int candidate, int original, long long budget, int& best_choice) {
    if (candidate <= 0 || candidate > balancer.max_value()) return;
    if (balancer.remaining(candidate) == 0) return;
    int cost = extra_cost(balancer, candidate, original);
    if (cost <= budget) {
        if (best_choice == -1 || candidate < best_choice) {
            best_choice = candidate;
        }
    }
}

}

std::vector<int> minimal_lexicographic_list(const std::vector<int>& values, int k) {
    int n = static_cast<int>(values.size());
    if (n == 0) return {};

    FrequencyBalancer balancer(values);
    std::vector<int> result(n);
    int used_mismatches = 0;

    for (int i = 0; i < n; ++i) {
        int current = values[i];

        balancer.consume_suffix(current);

        int remaining_positions = n - i - 1;
        long long base_total = static_cast<long long>(used_mismatches) + remaining_positions - balancer.match_total();
        long long budget = static_cast<long long>(k) - base_total;

        if (budget < 0) {
            budget = -1;  // forces selection to respect impossibility, handled by logic below
        }

        int choice = -1;
        consider_candidate(balancer, current, current, budget, choice);
        if (!balancer.more_values().empty()) {
            consider_candidate(balancer, *balancer.more_values().begin(), current, budget, choice);
        }
        if (!balancer.tight_values().empty()) {
            consider_candidate(balancer, *balancer.tight_values().begin(), current, budget, choice);
        }

        if (choice == -1) {
            choice = current;  // fallback, should not happen but keeps behavior defined
        }

        result[i] = choice;
        if (choice != current) {
            ++used_mismatches;
        }

        balancer.consume_value(choice);
    }

    return result;
}

#if !defined(TEST_BUILD)
int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);

    int n, k;
    if (!(std::cin >> n >> k)) {
        return 0;
    }
    std::vector<int> values(n);
    for (int i = 0; i < n; ++i) {
        std::cin >> values[i];
    }

    std::vector<int> answer = minimal_lexicographic_list(values, k);
    for (int i = 0; i < n; ++i) {
        if (i) std::cout << ' ';
        std::cout << answer[i];
    }
    std::cout << '\n';

    return 0;
}
#endif

Test details

Test 1 (public)

Group: 1, 3, 4, 5, 6

Verdict: ACCEPTED

input
6 3
6 5 1 4 1 3

correct output
1 5 1 4 3 6

user output
1 5 1 4 3 6

Test 2 (public)

Group: 1, 4, 5, 6

Verdict: ACCEPTED

input
4 4
1 2 3 4

correct output
1 2 3 4

user output
1 2 3 4

Test 3

Group: 1, 2, 4, 5, 6

Verdict: ACCEPTED

input
2 2
2 1

correct output
1 2

user output
1 2

Test 4

Group: 1, 2, 4, 5, 6

Verdict: ACCEPTED

input
10 2
6 6 6 6 6 6 6 6 6 6

correct output
6 6 6 6 6 6 6 6 6 6

user output
6 6 6 6 6 6 6 6 6 6

Test 5

Group: 1, 2, 4, 5, 6

Verdict: ACCEPTED

input
10 2
2 5 10 1 8 6 4 7 3 9

correct output
1 5 10 2 8 6 4 7 3 9

user output
1 5 10 2 8 6 4 7 3 9

Test 6

Group: 1, 3, 4, 5, 6

Verdict: ACCEPTED

input
10 3
6 9 2 7 5 4 9 9 10 8

correct output
2 6 9 7 5 4 9 9 10 8

user output
2 6 9 7 5 4 9 9 10 8

Test 7

Group: 1, 4, 5, 6

Verdict: ACCEPTED

input
10 4
3 4 2 9 5 1 5 6 10 8

correct output
1 2 3 9 5 4 5 6 10 8

user output
1 2 3 9 5 4 5 6 10 8

Test 8

Group: 1, 4, 5, 6

Verdict: ACCEPTED

input
10 7
8 10 6 4 5 3 1 9 2 9

correct output
1 2 3 4 5 6 8 9 9 10

user output
1 2 3 4 5 6 8 9 9 10

Test 9

Group: 1, 4, 5, 6

Verdict: ACCEPTED

input
10 10
8 5 7 7 6 9 5 1 3 4

correct output
1 3 4 5 5 6 7 7 8 9

user output
1 3 4 5 5 6 7 7 8 9

Test 10

Group: 1, 2, 4, 5, 6

Verdict: ACCEPTED

input
10 2
1 2 3 4 5 6 7 8 9 10

correct output
1 2 3 4 5 6 7 8 9 10

user output
1 2 3 4 5 6 7 8 9 10

Test 11

Group: 1, 4, 5, 6

Verdict: ACCEPTED

input
10 9
10 9 8 7 6 5 4 3 2 1

correct output
1 2 3 4 6 5 7 8 9 10

user output
1 2 3 4 6 5 7 8 9 10

Test 12

Group: 1, 4, 5, 6

Verdict: ACCEPTED

input
10 10
10 9 8 7 6 5 4 3 2 1

correct output
1 2 3 4 5 6 7 8 9 10

user output
1 2 3 4 5 6 7 8 9 10

Test 13

Group: 1, 4, 5, 6

Verdict: ACCEPTED

input
9 8
9 8 7 6 5 4 3 2 1

correct output
1 2 3 4 5 6 7 8 9

user output
1 2 3 4 5 6 7 8 9

Test 14

Group: 2, 6

Verdict: ACCEPTED

input
200000 2
176369 57172 92603 196271 1967...

correct output
1155 57172 92603 196271 196768...

user output
1155 57172 92603 196271 196768...

Test 15

Group: 2, 6

Verdict: ACCEPTED

input
200000 2
188653 156245 40967 173336 185...

correct output
57 156245 40967 173336 185896 ...

user output
57 156245 40967 173336 185896 ...

Test 16

Group: 2, 6

Verdict: ACCEPTED

input
200000 2
170455 14692 60230 38375 31037...

correct output
20 14692 60230 38375 31037 395...

user output
20 14692 60230 38375 31037 395...

Test 17

Group: 2, 6

Verdict: ACCEPTED

input
200000 2
59289 119695 145821 16906 1149...

correct output
1 119695 145821 16906 114932 1...

user output
1 119695 145821 16906 114932 1...

Test 18

Group: 2, 6

Verdict: ACCEPTED

input
200000 2
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

correct output
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

user output
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

Test 19

Group: 2, 6

Verdict: ACCEPTED

input
200000 2
200000 199999 199998 199997 19...

correct output
1 199999 199998 199997 199996 ...

user output
1 199999 199998 199997 199996 ...

Test 20

Group: 1, 3, 4, 5, 6

Verdict: ACCEPTED

input
3 3
3 2 1

correct output
1 2 3

user output
1 2 3

Test 21

Group: 3, 6

Verdict: ACCEPTED

input
200000 3
66357 7587 176209 27489 170275...

correct output
390 7587 66357 27489 170275 31...

user output
390 7587 66357 27489 170275 31...

Test 22

Group: 3, 6

Verdict: ACCEPTED

input
200000 3
93946 193045 25177 150263 1482...

correct output
205 93946 25177 150263 148229 ...

user output
205 93946 25177 150263 148229 ...

Test 23

Group: 3, 6

Verdict: ACCEPTED

input
200000 3
81262 22620 25235 22620 10144 ...

correct output
6 22620 25235 22620 10144 2614...

user output
6 22620 25235 22620 10144 2614...

Test 24

Group: 3, 6

Verdict: ACCEPTED

input
200000 3
62925 65929 74691 187894 13817...

correct output
1 62925 74691 187894 138170 15...

user output
1 62925 74691 187894 138170 15...

Test 25

Group: 3, 6

Verdict: ACCEPTED

input
200000 3
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

correct output
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

user output
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

Test 26

Group: 3, 6

Verdict: ACCEPTED

input
200000 3
200000 199999 199998 199997 19...

correct output
1 199999 199998 199997 199996 ...

user output
1 199999 199998 199997 199996 ...

Test 27

Group: 4, 6

Verdict: ACCEPTED

input
2000 100
1468 510 463 644 1429 1108 153...

correct output
1 2 3 4 5 6 7 8 9 10 11 13 14 ...

user output
1 2 3 4 5 6 7 8 9 10 11 13 14 ...

Test 28

Group: 4, 6

Verdict: ACCEPTED

input
2000 1000
1246 1024 680 1448 504 921 976...

correct output
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

user output
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

Test 29

Group: 4, 6

Verdict: ACCEPTED

input
2000 1900
461 1257 1198 1876 651 1930 15...

correct output
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

user output
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

Test 30

Group: 2, 4, 6

Verdict: ACCEPTED

input
2000 2
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

correct output
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

user output
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

Test 31

Group: 4, 6

Verdict: ACCEPTED

input
2000 597
2000 1999 1998 1997 1996 1995 ...

correct output
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

user output
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

Test 32

Group: 4, 6

Verdict: ACCEPTED

input
2000 2000
2000 1999 1998 1997 1996 1995 ...

correct output
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

user output
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

Test 33

Group: 5, 6

Verdict: ACCEPTED

input
200000 100
8 4 2 6 7 2 9 2 10 9 4 1 1 3 1...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

user output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

Test 34

Group: 5, 6

Verdict: ACCEPTED

input
200000 10000
5 7 2 6 1 9 7 2 4 10 1 4 4 1 9...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

user output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

Test 35

Group: 5, 6

Verdict: ACCEPTED

input
200000 190000
8 3 5 5 7 8 10 10 8 10 2 2 2 8...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

user output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

Test 36

Group: 2, 5, 6

Verdict: ACCEPTED

input
200000 2
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

user output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

Test 37

Group: 5, 6

Verdict: ACCEPTED

input
200000 200000
10 10 10 10 10 10 10 10 10 10 ...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

user output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

Test 38

Group: 6

Verdict: ACCEPTED

input
200000 100
151203 41607 101924 180578 132...

correct output
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

user output
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

Test 39

Group: 6

Verdict: ACCEPTED

input
200000 10000
172851 90759 102500 164610 200...

correct output
1 2 3 4 5 6 7 8 8 9 10 11 11 1...

user output
1 2 3 4 5 6 7 8 8 9 10 11 11 1...

Test 40

Group: 6

Verdict: ACCEPTED

input
200000 190000
176771 53238 75539 184219 9404...

correct output
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

user output
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

Test 41

Group: 2, 5, 6

Verdict: ACCEPTED

input
200000 2
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

user output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

Test 42

Group: 5, 6

Verdict: ACCEPTED

input
200000 200000
10 10 10 10 10 10 10 10 10 10 ...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

user output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

Test 43

Group: 1, 3, 4, 5, 6

Verdict: ACCEPTED

input
10 3
8 5 5 8 8 10 10 10 6 3

correct output
3 5 5 8 8 8 10 10 6 10

user output
3 5 5 8 8 8 10 10 6 10

Test 44

Group: 1, 2, 4, 5, 6

Verdict: ACCEPTED

input
10 2
1 1 2 5 2 7 1 2 4 2

correct output
1 1 1 5 2 7 2 2 4 2

user output
1 1 1 5 2 7 2 2 4 2

Test 45

Group: 1, 4, 5, 6

Verdict: ACCEPTED

input
10 4
1 1 2 5 2 7 1 2 4 2

correct output
1 1 1 2 2 5 7 2 4 2

user output
1 1 1 2 2 5 7 2 4 2