Submission details
Task:Lista
Sender:zli0122
Submission time:2026-01-17 21:55:37 +0200
Language:C++ (C++11)
Status:READY
Result:21
Feedback
groupverdictscore
#10
#2ACCEPTED9
#3ACCEPTED12
#40
#50
#60
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.06 s2, 6details
#15ACCEPTED0.06 s2, 6details
#16ACCEPTED0.06 s2, 6details
#17ACCEPTED0.06 s2, 6details
#18ACCEPTED0.11 s2, 6details
#19ACCEPTED0.06 s2, 6details
#20ACCEPTED0.00 s1, 3, 4, 5, 6details
#21ACCEPTED0.06 s3, 6details
#22ACCEPTED0.06 s3, 6details
#23ACCEPTED0.06 s3, 6details
#24ACCEPTED0.06 s3, 6details
#25ACCEPTED0.12 s3, 6details
#26ACCEPTED0.08 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.05 s5, 6details
#34ACCEPTED0.07 s5, 6details
#35ACCEPTED0.26 s5, 6details
#36ACCEPTED0.10 s2, 5, 6details
#37ACCEPTED0.22 s5, 6details
#38ACCEPTED0.06 s6details
#39ACCEPTED0.07 s6details
#40ACCEPTED0.33 s6details
#41ACCEPTED0.10 s2, 5, 6details
#42ACCEPTED0.22 s5, 6details
#43ACCEPTED0.00 s1, 3, 4, 5, 6details
#44ACCEPTED0.00 s1, 2, 4, 5, 6details
#450.00 s1, 4, 5, 6details

Code

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

struct SegTree {
    int n;
    vector<pair<int,int>> st;
    const pair<int,int> INF = {INT_MAX, INT_MAX};

    SegTree(int n=0): n(n) {
        st.assign(4*n+5, INF);
    }

    static pair<int,int> best(pair<int,int> a, pair<int,int> b) {
        // min by value, then min by -index (=> largest index)
        return min(a, b);
    }

    void build(const vector<pair<int,int>>& a, int p, int l, int r) {
        if (l == r) { st[p] = a[l]; return; }
        int m = (l + r) / 2;
        build(a, p*2, l, m);
        build(a, p*2+1, m+1, r);
        st[p] = best(st[p*2], st[p*2+1]);
    }

    void build(const vector<pair<int,int>>& a) {
        build(a, 1, 1, n);
    }

    void update(int idx, pair<int,int> val, int p, int l, int r) {
        if (l == r) { st[p] = val; return; }
        int m = (l + r) / 2;
        if (idx <= m) update(idx, val, p*2, l, m);
        else update(idx, val, p*2+1, m+1, r);
        st[p] = best(st[p*2], st[p*2+1]);
    }

    void update(int idx, pair<int,int> val) {
        update(idx, val, 1, 1, n);
    }

    pair<int,int> query(int ql, int qr, int p, int l, int r) {
        if (qr < l || r < ql) return INF;
        if (ql <= l && r <= qr) return st[p];
        int m = (l + r) / 2;
        return best(query(ql, qr, p*2, l, m),
                    query(ql, qr, p*2+1, m+1, r));
    }

    pair<int,int> query(int l, int r) {
        if (l > r) return INF;
        return query(l, r, 1, 1, n);
    }
};

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n, k;
    cin >> n >> k;
    vector<int> a(n+1);
    for (int i = 1; i <= n; i++) cin >> a[i];

    vector<char> used(n+1, false);
    int usedCount = 0;

    // Trees store (value, -index). INF for "not present".
    vector<pair<int,int>> initUsed(n+1), initUnused(n+1);

    for (int i = 1; i <= n; i++) {
        initUsed[i] = {INT_MAX, INT_MAX};        // empty initially
        initUnused[i] = {a[i], -i};              // all unused initially
    }

    SegTree segUsed(n), segUnused(n);
    segUsed.build(initUsed);
    segUnused.build(initUnused);

    auto setUsed = [&](int idx) {
        if (used[idx]) return;
        used[idx] = true;
        usedCount++;
        // remove from UNUSED, add to USED
        segUnused.update(idx, {INT_MAX, INT_MAX});
        segUsed.update(idx, {a[idx], -idx});
    };

    auto refreshValue = [&](int idx) {
        if (used[idx]) segUsed.update(idx, {a[idx], -idx});
        else segUnused.update(idx, {a[idx], -idx});
    };

    for (int i = 1; i <= n; i++) {
        int rem = k - usedCount;
        if (rem <= 0 && !used[i]) {
            // can't include i anymore, so it cannot change
            continue;
        }

        pair<int,int> best = {a[i], -i}; // default: keep as-is
        int needCost_i = used[i] ? 0 : 1;

        // If i is (or can be) included, consider donors in [i..n]
        // donor from USED costs 0 extra, donor from UNUSED costs 1 extra
        if (rem >= needCost_i) {
            // donors already in used set
            auto candU = segUsed.query(i, n);
            best = min(best, candU);

            // donors from unused set need one more budget slot (unless donor is i itself, but then no change)
            if (rem >= needCost_i + 1) {
                auto candN = segUnused.query(i, n);
                best = min(best, candN);
            }
        }

        int bestVal = best.first;
        int bestPos = -best.second;

        if (bestVal < a[i] && bestPos != i) {
            // We will swap i <-> bestPos to bring bestVal to i
            int extra = 0;
            if (!used[i]) extra++;
            if (!used[bestPos]) extra++;

            if (extra <= rem) {
                // activate indices
                setUsed(i);
                setUsed(bestPos);

                // swap values
                swap(a[i], a[bestPos]);

                // refresh segment trees
                refreshValue(i);
                refreshValue(bestPos);
            }
        }
    }

    for (int i = 1; i <= n; i++) {
        cout << a[i] << (i == n ? '\n' : ' ');
    }
    return 0;
}

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:

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 7 2 2 4 5

Feedback: Incorrect character on line 1 col 11: expected "5", got "7"