| Task: | Lista |
| Sender: | zli0122 |
| Submission time: | 2026-01-18 16:25:39 +0200 |
| Language: | C++ (C++11) |
| Status: | READY |
| Result: | 100 |
| group | verdict | score |
|---|---|---|
| #1 | ACCEPTED | 7 |
| #2 | ACCEPTED | 9 |
| #3 | ACCEPTED | 12 |
| #4 | ACCEPTED | 18 |
| #5 | ACCEPTED | 23 |
| #6 | ACCEPTED | 31 |
| test | verdict | time | group | |
|---|---|---|---|---|
| #1 | ACCEPTED | 0.00 s | 1, 3, 4, 5, 6 | details |
| #2 | ACCEPTED | 0.00 s | 1, 4, 5, 6 | details |
| #3 | ACCEPTED | 0.00 s | 1, 2, 4, 5, 6 | details |
| #4 | ACCEPTED | 0.00 s | 1, 2, 4, 5, 6 | details |
| #5 | ACCEPTED | 0.00 s | 1, 2, 4, 5, 6 | details |
| #6 | ACCEPTED | 0.00 s | 1, 3, 4, 5, 6 | details |
| #7 | ACCEPTED | 0.00 s | 1, 4, 5, 6 | details |
| #8 | ACCEPTED | 0.00 s | 1, 4, 5, 6 | details |
| #9 | ACCEPTED | 0.00 s | 1, 4, 5, 6 | details |
| #10 | ACCEPTED | 0.00 s | 1, 2, 4, 5, 6 | details |
| #11 | ACCEPTED | 0.00 s | 1, 4, 5, 6 | details |
| #12 | ACCEPTED | 0.00 s | 1, 4, 5, 6 | details |
| #13 | ACCEPTED | 0.00 s | 1, 4, 5, 6 | details |
| #14 | ACCEPTED | 0.10 s | 2, 6 | details |
| #15 | ACCEPTED | 0.12 s | 2, 6 | details |
| #16 | ACCEPTED | 0.15 s | 2, 6 | details |
| #17 | ACCEPTED | 0.26 s | 2, 6 | details |
| #18 | ACCEPTED | 0.14 s | 2, 6 | details |
| #19 | ACCEPTED | 0.15 s | 2, 6 | details |
| #20 | ACCEPTED | 0.00 s | 1, 3, 4, 5, 6 | details |
| #21 | ACCEPTED | 0.10 s | 3, 6 | details |
| #22 | ACCEPTED | 0.12 s | 3, 6 | details |
| #23 | ACCEPTED | 0.15 s | 3, 6 | details |
| #24 | ACCEPTED | 0.26 s | 3, 6 | details |
| #25 | ACCEPTED | 0.15 s | 3, 6 | details |
| #26 | ACCEPTED | 0.14 s | 3, 6 | details |
| #27 | ACCEPTED | 0.01 s | 4, 6 | details |
| #28 | ACCEPTED | 0.01 s | 4, 6 | details |
| #29 | ACCEPTED | 0.01 s | 4, 6 | details |
| #30 | ACCEPTED | 0.01 s | 2, 4, 6 | details |
| #31 | ACCEPTED | 0.01 s | 4, 6 | details |
| #32 | ACCEPTED | 0.01 s | 4, 6 | details |
| #33 | ACCEPTED | 0.07 s | 5, 6 | details |
| #34 | ACCEPTED | 0.07 s | 5, 6 | details |
| #35 | ACCEPTED | 0.06 s | 5, 6 | details |
| #36 | ACCEPTED | 0.06 s | 2, 5, 6 | details |
| #37 | ACCEPTED | 0.06 s | 5, 6 | details |
| #38 | ACCEPTED | 0.27 s | 6 | details |
| #39 | ACCEPTED | 0.30 s | 6 | details |
| #40 | ACCEPTED | 0.26 s | 6 | details |
| #41 | ACCEPTED | 0.06 s | 2, 5, 6 | details |
| #42 | ACCEPTED | 0.05 s | 5, 6 | details |
| #43 | ACCEPTED | 0.00 s | 1, 3, 4, 5, 6 | details |
| #44 | ACCEPTED | 0.00 s | 1, 2, 4, 5, 6 | details |
| #45 | ACCEPTED | 0.00 s | 1, 4, 5, 6 | details |
Code
#include <bits/stdc++.h>
namespace {
// Tracks how many copies of each value we can still place and how many
// appear in the yet-to-be-processed suffix of the original array.
// For each value we know whether taking one copy would reduce the
// "free" matches we can make later (tight) or not (loose).
class ValueTracker {
public:
explicit ValueTracker(const std::vector<int>& values) {
max_value_ = 0;
for (int v : values) {
max_value_ = std::max(max_value_, v);
}
available_.assign(max_value_ + 1, 0);
suffix_need_.assign(max_value_ + 1, 0);
for (int v : values) {
++available_[v];
++suffix_need_[v];
}
matched_ = 0;
for (int v = 1; v <= max_value_; ++v) {
matched_ += std::min(available_[v], suffix_need_[v]);
if (available_[v] > 0) {
classify_value(v);
}
}
}
int max_value() const { return max_value_; }
int remaining(int v) const { return available_[v]; }
int suffix(int v) const { return suffix_need_[v]; }
long long matched_total() const { return matched_; }
const std::set<int>& loose_values() const { return loose_; }
const std::set<int>& tight_values() const { return tight_; }
// We move past position i, so the suffix loses one occurrence of values[i].
void consume_suffix(int v) {
if (!in_range(v)) return;
adjust_match(v, 0, -1);
reclassify(v);
}
// We place one copy of value v into the result, so availability shrinks.
void consume_value(int v) {
if (!in_range(v)) return;
adjust_match(v, -1, 0);
reclassify(v);
}
private:
bool in_range(int v) const { return 1 <= v && v <= max_value_; }
void adjust_match(int v, int delta_available, int delta_suffix) {
matched_ -= std::min(available_[v], suffix_need_[v]);
available_[v] += delta_available;
suffix_need_[v] += delta_suffix;
matched_ += std::min(available_[v], suffix_need_[v]);
}
void classify_value(int v) {
if (available_[v] == 0) return;
if (available_[v] > suffix_need_[v]) {
loose_.insert(v);
} else {
tight_.insert(v);
}
}
void reclassify(int v) {
if (!in_range(v)) return;
loose_.erase(v);
tight_.erase(v);
classify_value(v);
}
int max_value_ = 0;
std::vector<int> available_;
std::vector<int> suffix_need_;
long long matched_ = 0;
// Values where we have spare copies (picking one now does not hurt the suffix).
std::set<int> loose_;
// Values that are tightly coupled to the suffix demand (picking one now consumes future budget).
std::set<int> tight_;
};
int extra_cost(const ValueTracker& tracker, int candidate, int original) {
if (candidate < 1 || candidate > tracker.max_value()) return std::numeric_limits<int>::max();
if (tracker.remaining(candidate) == 0) return std::numeric_limits<int>::max();
// We spend one mismatch if we change the value at this index.
int cost = (candidate == original) ? 0 : 1;
// If this value is "tight" (demand >= supply), using it now
// forces one extra mismatch somewhere in the suffix.
if (tracker.remaining(candidate) <= tracker.suffix(candidate)) {
cost += 1;
}
return cost;
}
void consider_candidate(const ValueTracker& tracker, int candidate, int original, long long budget, int& best_choice) {
int cost = extra_cost(tracker, candidate, original);
if (cost <= budget) {
if (best_choice == -1 || candidate < best_choice) {
best_choice = candidate;
}
}
}
}
// Greedy construction of the lexicographically smallest permutation that differs
// from the original array in at most k positions. We place elements left to right
// and keep track of how many mismatches we have already spent and how many we are
// forced to spend in the suffix, so we know how much "budget" remains for a smaller
// choice at the current index.
std::vector<int> minimal_lexicographic_list(const std::vector<int>& values, int k) {
int n = static_cast<int>(values.size());
if (n == 0) return {};
ValueTracker tracker(values);
std::vector<int> result(n);
int used_mismatches = 0;
for (int i = 0; i < n; ++i) {
int current = values[i];
// Once position i is fixed, the suffix no longer needs values[i].
tracker.consume_suffix(current);
int remaining_positions = n - i - 1;
long long unavoidable = remaining_positions - tracker.matched_total();
long long budget = static_cast<long long>(k) - (used_mismatches + unavoidable);
if (budget < 0) budget = -1;
int choice = -1;
// Only three categories can produce the optimal next value:
// (1) Keep the original value to avoid spending budget.
// (2) Take the smallest "loose" value (no extra future mismatch).
// (3) Take the smallest "tight" value (would force one future mismatch).
consider_candidate(tracker, current, current, budget, choice);
if (!tracker.loose_values().empty()) {
consider_candidate(tracker, *tracker.loose_values().begin(), current, budget, choice);
}
if (!tracker.tight_values().empty()) {
consider_candidate(tracker, *tracker.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;
}
tracker.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 |
