QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#355432#8107. Permutationucup-team004#AC ✓54ms111376kbC++202.5kb2024-03-16 17:41:192024-03-16 17:41:20

Judging History

你现在查看的是最新测评结果

  • [2024-03-16 17:41:20]
  • 评测
  • 测评结果:AC
  • 用时:54ms
  • 内存:111376kb
  • [2024-03-16 17:41:19]
  • 提交

answer

#include <bits/stdc++.h>

using i64 = long long;
using i128 = __int128;

constexpr int B = 70;
constexpr int N = 3E5;
constexpr i64 inf = 1E18 + 1;

int fen[N];

void add(int x, int y) {
    for (int i = x + 1; i <= N; i += i & -i) {
        fen[i - 1] += y;
    }
}

int get(int k) {
    int x = 0;
    for (int i = (1 << 18); i; i /= 2) {
        if (x + i <= N && k >= fen[x + i - 1]) {
            x += i;
            k -= fen[x - 1];
        }
    }
    return x;
}

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    
    int n;
    i64 k;
    std::cin >> n >> k;

    i64 target = 1LL * n * (n - 1) / 2;
    if (target % 2 == 1) {
        std::cout << "NO\n";
        return 0;
    }
    target /= 2;
    k--;
    std::vector<int> a(n);

    std::vector<std::vector<i64>> dp(n + 1);
    int U = -1;
    for (int i = n - 1; i >= 0; i--) {
        if (i >= B && target - i >= B / 2 && target - i + B / 2 <= 1LL * (i + 1) * i / 2) {
            a[i] = i;
        } else {
            if (U == -1) {
                // std::cerr << i << " " << B << "\n";
                U = n > 5000 ? B : target;
                for (int j = 0; j <= i; j++) {
                    dp[j].resize(U + 1);
                }
                dp[0][0] = 1;
                for (int j = 0; j < i; j++) {
                    i128 sum = 0;
                    for (int l = 0; l <= U; l++) {
                        sum += dp[j][l];
                        if (l > j) {
                            sum -= dp[j][l - j - 1];
                        }
                        dp[j + 1][l] = std::min(i128(inf), sum);
                    }
                }
            }
            for (int x = std::min(target, 1LL * i); x >= 0; x--) {
                assert(target - x <= U);
                if (k < dp[i][target - x]) {
                    a[i] = x;
                    break;
                }
                k -= dp[i][target - x];
                if (x == 0) {
                    std::cout << "NO\n";
                    return 0;
                }
            }
        }
        target -= a[i];
    }

    for (int i = 0; i < n; i++) {
        a[i] = i - a[i];
    }
    std::reverse(a.begin(), a.end());
    std::vector<int> p(n);

    std::cout << "YES\n";
    for (int i = 0; i < n; i++) {
        add(i, 1);
    }
    for (int i = 0; i < n; i++) {
        p[i] = get(a[i]);
        std::cout << p[i] + 1 << " \n"[i == n - 1];
        add(p[i], -1);
    }

    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 3804kb

input:

4 3

output:

YES
2 4 1 3

result:

ok 2 lines

Test #2:

score: 0
Accepted
time: 0ms
memory: 3836kb

input:

4 57

output:

NO

result:

ok single line: 'NO'

Test #3:

score: 0
Accepted
time: 1ms
memory: 3672kb

input:

1 1

output:

YES
1

result:

ok 2 lines

Test #4:

score: 0
Accepted
time: 0ms
memory: 3644kb

input:

1 2

output:

NO

result:

ok single line: 'NO'

Test #5:

score: 0
Accepted
time: 1ms
memory: 3552kb

input:

1 42

output:

NO

result:

ok single line: 'NO'

Test #6:

score: 0
Accepted
time: 1ms
memory: 3648kb

input:

4 1

output:

YES
1 4 3 2

result:

ok 2 lines

Test #7:

score: 0
Accepted
time: 0ms
memory: 3644kb

input:

4 6

output:

YES
4 1 2 3

result:

ok 2 lines

Test #8:

score: 0
Accepted
time: 0ms
memory: 3608kb

input:

4 7

output:

NO

result:

ok single line: 'NO'

Test #9:

score: 0
Accepted
time: 1ms
memory: 3632kb

input:

5 13

output:

YES
3 4 2 1 5

result:

ok 2 lines

Test #10:

score: 0
Accepted
time: 0ms
memory: 3652kb

input:

5 21

output:

YES
5 1 3 2 4

result:

ok 2 lines

Test #11:

score: 0
Accepted
time: 0ms
memory: 3652kb

input:

5 22

output:

YES
5 2 1 3 4

result:

ok 2 lines

Test #12:

score: 0
Accepted
time: 0ms
memory: 3840kb

input:

5 23

output:

NO

result:

ok single line: 'NO'

Test #13:

score: 0
Accepted
time: 0ms
memory: 3584kb

input:

8 3836

output:

YES
8 7 2 1 3 4 5 6

result:

ok 2 lines

Test #14:

score: 0
Accepted
time: 0ms
memory: 3596kb

input:

8 3837

output:

NO

result:

ok single line: 'NO'

Test #15:

score: 0
Accepted
time: 0ms
memory: 3644kb

input:

9 29228

output:

YES
9 8 4 1 2 3 5 6 7

result:

ok 2 lines

Test #16:

score: 0
Accepted
time: 0ms
memory: 3476kb

input:

9 29229

output:

NO

result:

ok single line: 'NO'

Test #17:

score: 0
Accepted
time: 1ms
memory: 3840kb

input:

9 32768

output:

NO

result:

ok single line: 'NO'

Test #18:

score: 0
Accepted
time: 0ms
memory: 3608kb

input:

2 1

output:

NO

result:

ok single line: 'NO'

Test #19:

score: 0
Accepted
time: 0ms
memory: 3552kb

input:

7 1

output:

NO

result:

ok single line: 'NO'

Test #20:

score: 0
Accepted
time: 0ms
memory: 3840kb

input:

13 296643390

output:

YES
13 12 11 7 1 2 3 4 5 6 8 9 10

result:

ok 2 lines

Test #21:

score: 0
Accepted
time: 0ms
memory: 3552kb

input:

13 296643391

output:

NO

result:

ok single line: 'NO'

Test #22:

score: 0
Accepted
time: 0ms
memory: 3820kb

input:

20 62119523114983223

output:

YES
20 19 18 17 16 10 2 1 3 4 5 6 7 8 9 11 12 13 14 15

result:

ok 2 lines

Test #23:

score: 0
Accepted
time: 1ms
memory: 3648kb

input:

20 62119523114983224

output:

YES
20 19 18 17 16 11 1 2 3 4 5 6 7 8 9 10 12 13 14 15

result:

ok 2 lines

Test #24:

score: 0
Accepted
time: 0ms
memory: 3512kb

input:

20 62119523114983225

output:

NO

result:

ok single line: 'NO'

Test #25:

score: 0
Accepted
time: 0ms
memory: 3876kb

input:

21 1

output:

YES
1 2 3 4 5 6 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7

result:

ok 2 lines

Test #26:

score: 0
Accepted
time: 0ms
memory: 3880kb

input:

21 1000000000000000000

output:

YES
17 21 14 6 9 4 3 11 7 2 20 1 18 15 12 16 5 10 8 13 19

result:

ok 2 lines

Test #27:

score: 0
Accepted
time: 0ms
memory: 3748kb

input:

44 333333333333333333

output:

YES
1 2 3 4 5 6 7 8 9 10 11 21 42 44 41 40 43 38 39 35 34 37 36 32 31 33 29 27 28 25 30 26 23 24 15 22 18 16 20 19 17 12 13 14

result:

ok 2 lines

Test #28:

score: 0
Accepted
time: 1ms
memory: 3848kb

input:

49 600000000000000000

output:

YES
1 2 3 4 5 6 7 8 9 10 11 12 13 37 47 49 44 46 45 48 43 42 41 39 40 35 38 33 31 36 34 30 27 32 25 28 29 26 24 23 17 22 20 19 21 18 16 15 14

result:

ok 2 lines

Test #29:

score: 0
Accepted
time: 0ms
memory: 3864kb

input:

16 738680521142

output:

YES
16 15 14 13 7 1 2 3 4 5 6 8 9 10 11 12

result:

ok 2 lines

Test #30:

score: 0
Accepted
time: 1ms
memory: 3556kb

input:

16 738680521143

output:

NO

result:

ok single line: 'NO'

Test #31:

score: 0
Accepted
time: 0ms
memory: 3608kb

input:

350 702274833889168257

output:

NO

result:

ok single line: 'NO'

Test #32:

score: 0
Accepted
time: 0ms
memory: 3544kb

input:

347 823694565238057857

output:

NO

result:

ok single line: 'NO'

Test #33:

score: 0
Accepted
time: 0ms
memory: 3984kb

input:

348 548514836018174081

output:

YES
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 ...

result:

ok 2 lines

Test #34:

score: 0
Accepted
time: 1ms
memory: 3716kb

input:

349 1000000000000000000

output:

YES
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 ...

result:

ok 2 lines

Test #35:

score: 0
Accepted
time: 0ms
memory: 3868kb

input:

17 11501573822788

output:

YES
17 16 15 14 11 1 2 3 4 5 6 7 8 9 10 12 13

result:

ok 2 lines

Test #36:

score: 0
Accepted
time: 1ms
memory: 3640kb

input:

17 11501573822789

output:

NO

result:

ok single line: 'NO'

Test #37:

score: 0
Accepted
time: 0ms
memory: 9968kb

input:

1536 1000000000000000000

output:

YES
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 ...

result:

ok 2 lines

Test #38:

score: 0
Accepted
time: 5ms
memory: 11360kb

input:

1533 1

output:

YES
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 ...

result:

ok 2 lines

Test #39:

score: 0
Accepted
time: 0ms
memory: 3616kb

input:

1534 639944301316494081

output:

NO

result:

ok single line: 'NO'

Test #40:

score: 0
Accepted
time: 1ms
memory: 3616kb

input:

1535 133749702370803553

output:

NO

result:

ok single line: 'NO'

Test #41:

score: 0
Accepted
time: 0ms
memory: 3676kb

input:

12 25598186

output:

YES
12 11 10 4 1 2 3 5 6 7 8 9

result:

ok 2 lines

Test #42:

score: 0
Accepted
time: 0ms
memory: 3604kb

input:

12 25598187

output:

NO

result:

ok single line: 'NO'

Test #43:

score: 0
Accepted
time: 11ms
memory: 34432kb

input:

5000 1

output:

YES
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 ...

result:

ok 2 lines

Test #44:

score: 0
Accepted
time: 7ms
memory: 46320kb

input:

4997 577621398254762881

output:

YES
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 ...

result:

ok 2 lines

Test #45:

score: 0
Accepted
time: 0ms
memory: 3596kb

input:

4998 1000000000000000000

output:

NO

result:

ok single line: 'NO'

Test #46:

score: 0
Accepted
time: 0ms
memory: 3576kb

input:

4999 1000000000000000000

output:

NO

result:

ok single line: 'NO'

Test #47:

score: 0
Accepted
time: 1ms
memory: 3572kb

input:

8 3836

output:

YES
8 7 2 1 3 4 5 6

result:

ok 2 lines

Test #48:

score: 0
Accepted
time: 1ms
memory: 3500kb

input:

8 3837

output:

NO

result:

ok single line: 'NO'

Test #49:

score: 0
Accepted
time: 4ms
memory: 16328kb

input:

30000 15298495309447071

output:

YES
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 ...

result:

ok 2 lines

Test #50:

score: 0
Accepted
time: 7ms
memory: 16316kb

input:

29997 253859976519879617

output:

YES
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 ...

result:

ok 2 lines

Test #51:

score: 0
Accepted
time: 1ms
memory: 3568kb

input:

29998 1

output:

NO

result:

ok single line: 'NO'

Test #52:

score: 0
Accepted
time: 0ms
memory: 3636kb

input:

29999 1000000000000000000

output:

NO

result:

ok single line: 'NO'

Test #53:

score: 0
Accepted
time: 0ms
memory: 3636kb

input:

5 10

output:

YES
3 2 4 5 1

result:

ok 2 lines

Test #54:

score: 0
Accepted
time: 0ms
memory: 3536kb

input:

5 25

output:

NO

result:

ok single line: 'NO'

Test #55:

score: 0
Accepted
time: 12ms
memory: 35544kb

input:

75000 1000000000000000000

output:

YES
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 ...

result:

ok 2 lines

Test #56:

score: 0
Accepted
time: 19ms
memory: 35724kb

input:

74997 1

output:

YES
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 ...

result:

ok 2 lines

Test #57:

score: 0
Accepted
time: 0ms
memory: 3500kb

input:

74998 952975592247715841

output:

NO

result:

ok single line: 'NO'

Test #58:

score: 0
Accepted
time: 0ms
memory: 3572kb

input:

74999 563899854863562881

output:

NO

result:

ok single line: 'NO'

Test #59:

score: 0
Accepted
time: 1ms
memory: 3880kb

input:

20 62119523114983182

output:

YES
20 19 18 17 16 9 1 2 4 3 5 7 6 8 10 11 12 13 14 15

result:

ok 2 lines

Test #60:

score: 0
Accepted
time: 0ms
memory: 3624kb

input:

20 62119523114983324

output:

NO

result:

ok single line: 'NO'

Test #61:

score: 0
Accepted
time: 28ms
memory: 57388kb

input:

125000 890645059675041665

output:

YES
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 ...

result:

ok 2 lines

Test #62:

score: 0
Accepted
time: 28ms
memory: 57284kb

input:

124997 1

output:

YES
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 ...

result:

ok 2 lines

Test #63:

score: 0
Accepted
time: 0ms
memory: 3840kb

input:

124998 873954992112723841

output:

NO

result:

ok single line: 'NO'

Test #64:

score: 0
Accepted
time: 0ms
memory: 3840kb

input:

124999 248632969637282529

output:

NO

result:

ok single line: 'NO'

Test #65:

score: 0
Accepted
time: 1ms
memory: 3596kb

input:

17 11501573822775

output:

YES
17 16 15 14 9 2 3 1 4 5 6 7 8 10 11 12 13

result:

ok 2 lines

Test #66:

score: 0
Accepted
time: 0ms
memory: 3776kb

input:

17 11501573823343

output:

NO

result:

ok single line: 'NO'

Test #67:

score: 0
Accepted
time: 39ms
memory: 79004kb

input:

175000 1000000000000000000

output:

YES
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 ...

result:

ok 2 lines

Test #68:

score: 0
Accepted
time: 44ms
memory: 78868kb

input:

174997 328322156846141249

output:

YES
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 ...

result:

ok 2 lines

Test #69:

score: 0
Accepted
time: 0ms
memory: 3548kb

input:

174998 184010129245469601

output:

NO

result:

ok single line: 'NO'

Test #70:

score: 0
Accepted
time: 0ms
memory: 3492kb

input:

174999 988653544556724225

output:

NO

result:

ok single line: 'NO'

Test #71:

score: 0
Accepted
time: 1ms
memory: 3656kb

input:

16 738680521137

output:

YES
16 15 14 13 6 1 2 3 4 7 5 8 9 10 11 12

result:

ok 2 lines

Test #72:

score: 0
Accepted
time: 0ms
memory: 3800kb

input:

16 738680521147

output:

NO

result:

ok single line: 'NO'

Test #73:

score: 0
Accepted
time: 54ms
memory: 111376kb

input:

250000 265999253667994753

output:

YES
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 ...

result:

ok 2 lines

Test #74:

score: 0
Accepted
time: 49ms
memory: 111372kb

input:

249997 1000000000000000000

output:

YES
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 ...

result:

ok 2 lines

Test #75:

score: 0
Accepted
time: 0ms
memory: 3636kb

input:

249998 994057636750856961

output:

NO

result:

ok single line: 'NO'

Test #76:

score: 0
Accepted
time: 0ms
memory: 3788kb

input:

249999 728689378265228289

output:

NO

result:

ok single line: 'NO'