CSES - Datatähti 2025 loppu - Results
Submission details
Task:Permutaatio
Sender:vgtcross
Submission time:2025-01-18 14:11:00 +0200
Language:C++ (C++20)
Status:READY
Result:100
Feedback
groupverdictscore
#1ACCEPTED12
#2ACCEPTED33
#3ACCEPTED55
Test results
testverdicttimegroup
#1ACCEPTED0.01 s1, 2, 3details
#2ACCEPTED0.01 s1, 2, 3details
#3ACCEPTED0.01 s1, 2, 3details
#4ACCEPTED0.01 s1, 2, 3details
#5ACCEPTED0.01 s1, 2, 3details
#6ACCEPTED0.01 s1, 2, 3details
#7ACCEPTED0.01 s1, 2, 3details
#8ACCEPTED0.01 s1, 2, 3details
#9ACCEPTED0.01 s1, 2, 3details
#10ACCEPTED0.01 s1, 2, 3details
#11ACCEPTED0.01 s2, 3details
#12ACCEPTED0.01 s2, 3details
#13ACCEPTED0.01 s2, 3details
#14ACCEPTED0.01 s2, 3details
#15ACCEPTED0.01 s2, 3details
#16ACCEPTED0.14 s3details
#17ACCEPTED0.14 s3details
#18ACCEPTED0.10 s3details
#19ACCEPTED0.09 s3details
#20ACCEPTED0.06 s3details
#21ACCEPTED0.01 s1, 2, 3details
#22ACCEPTED0.01 s2, 3details
#23ACCEPTED0.07 s3details

Compiler report

input/code.cpp: In function 'void solve()':
input/code.cpp:38:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   38 |         if (a > lis.size()) {
      |             ~~^~~~~~~~~~~~
input/code.cpp:44:24: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   44 |         if (lis.size() > a) {
      |             ~~~~~~~~~~~^~~
input/code.cpp:55:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   55 |         if (a > lis.size()) {
      |             ~~^~~~~~~~~~~~
input/code.cpp:61:24: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   61 |         if (lis.size() > a) {
      |...

Code

#include <bits/stdc++.h>

#define debug(x) cout << #x << ": " << x << endl
#define fi first
#define se second
#define all(x) begin(x),end(x)
#define rall(x) rbegin(x),rend(x)

using namespace std;
using ll = long long;

const int N = 200200;

vector<int> adj[N];
int st[N];
vector<int> ord;

bool dfs(int u) {
    if (st[u] == 1) return 1;
    if (st[u] == 2) return 0;
    st[u] = 1;
    for (int v : adj[u]) {
        if (dfs(v)) return 1;
    }
    st[u] = 2;
    ord.push_back(u);
    return 0;
}

void solve() {
    int n;
    cin >> n;

    vector<int> lis(1, -1);
    for (int i = 0; i < n; ++i) {
        int a;
        cin >> a;
        if (a > lis.size()) {
            cout << "IMPOSSIBLE\n";
            return;
        }

        if (lis[a-1] != -1) adj[lis[a-1]].push_back(i);
        if (lis.size() > a) {
            adj[i].push_back(lis[a]);
            lis[a] = i;
        } else lis.push_back(i);
    }

    vector<int> b(n);
    lis = vector(1, -1);
    for (int &i : b) cin >> i;
    for (int i = n-1; i >= 0; --i) {
        int a = b[i];
        if (a > lis.size()) {
            cout << "IMPOSSIBLE\n";
            return;
        }

        if (lis[a-1] != -1) adj[lis[a-1]].push_back(i);
        if (lis.size() > a) {
            adj[i].push_back(lis[a]);
            lis[a] = i;
        } else lis.push_back(i);
    }

    for (int i = 0; i < n; ++i) {
        if (dfs(i)) {
            cout << "IMPOSSIBLE\n";
            return;
        }
    }

    vector<int> ans(n);
    for (int i = 0; i < n; ++i) ans[ord[i]] = n-i;
    for (int i = 0; i < n; ++i) cout << ans[i] << " \n"[i == n-1];
}

int main() {
    cin.tie(0) -> sync_with_stdio(0);

    solve();
}

Test details

Test 1

Group: 1, 2, 3

Verdict: ACCEPTED

input
1
1
1

correct output

user output
1

Test 2

Group: 1, 2, 3

Verdict: ACCEPTED

input
2
1 1
1 1

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 3

Group: 1, 2, 3

Verdict: ACCEPTED

input
3
1 1 3
3 2 1

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 4

Group: 1, 2, 3

Verdict: ACCEPTED

input
3
1 3 2
2 1 3

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 5

Group: 1, 2, 3

Verdict: ACCEPTED

input
5
1 2 3 4 5
2 1 1 1 1

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 6

Group: 1, 2, 3

Verdict: ACCEPTED

input
8
1 2 2 3 2 3 4 5
1 3 2 2 1 1 1 1

correct output
1 8 5 7 2 3 4 6 

user output
1 8 6 7 2 3 4 5

Test 7

Group: 1, 2, 3

Verdict: ACCEPTED

input
8
1 2 2 2 1 3 2 1
3 5 4 3 2 3 2 1

correct output
3 8 6 5 2 7 4 1 

user output
4 8 7 5 2 6 3 1

Test 8

Group: 1, 2, 3

Verdict: ACCEPTED

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

correct output
1 2 3 4 5 6 7 8 

user output
1 2 3 4 5 6 7 8

Test 9

Group: 1, 2, 3

Verdict: ACCEPTED

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

correct output
8 7 6 5 4 3 2 1 

user output
8 7 6 5 4 3 2 1

Test 10

Group: 1, 2, 3

Verdict: ACCEPTED

input
8
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 11

Group: 2, 3

Verdict: ACCEPTED

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

correct output
25 205 54 76 500 218 316 181 3...

user output
61 348 123 132 500 350 446 263...
Truncated

Test 12

Group: 2, 3

Verdict: ACCEPTED

input
500
1 2 3 1 1 2 2 4 1 3 5 3 3 3 4 ...

correct output
336 388 404 309 233 377 240 42...

user output
447 472 480 425 382 450 383 48...
Truncated

Test 13

Group: 2, 3

Verdict: ACCEPTED

input
500
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 ...
Truncated

Test 14

Group: 2, 3

Verdict: ACCEPTED

input
500
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

correct output
500 499 498 497 496 495 494 49...

user output
500 499 498 497 496 495 494 49...
Truncated

Test 15

Group: 2, 3

Verdict: ACCEPTED

input
500
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 16

Group: 3

Verdict: ACCEPTED

input
200000
1 2 2 3 2 1 3 3 2 4 2 3 5 4 5 ...

correct output
12162 165274 130162 168624 391...

user output
21215 194329 178186 194446 790...
Truncated

Test 17

Group: 3

Verdict: ACCEPTED

input
200000
1 1 2 3 3 2 4 3 4 5 2 5 6 7 3 ...

correct output
191389 13806 133836 173924 159...

user output
199685 22734 181920 197146 193...
Truncated

Test 18

Group: 3

Verdict: ACCEPTED

input
200000
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 ...
Truncated

Test 19

Group: 3

Verdict: ACCEPTED

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

correct output
200000 199999 199998 199997 19...

user output
200000 199999 199998 199997 19...
Truncated

Test 20

Group: 3

Verdict: ACCEPTED

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

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 21

Group: 1, 2, 3

Verdict: ACCEPTED

input
8
1 1 2 1 2 3 1 3
4 3 3 2 2 3 1 1

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 22

Group: 2, 3

Verdict: ACCEPTED

input
500
1 2 3 2 1 2 1 2 3 3 3 3 4 1 5 ...

correct output
IMPOSSIBLE

user output
IMPOSSIBLE

Test 23

Group: 3

Verdict: ACCEPTED

input
200000
1 1 1 2 2 3 1 3 4 1 5 4 2 5 6 ...

correct output
IMPOSSIBLE

user output
IMPOSSIBLE