CSES - Datatähti 2025 loppu - Results
Submission details
Task:Poistot
Sender:Hattless
Submission time:2025-01-18 16:31:40 +0200
Language:C++ (C++20)
Status:READY
Result:11
Feedback
groupverdictscore
#1ACCEPTED11
#20
#30
Test results
testverdicttimegroup
#1ACCEPTED0.00 s1, 3details
#2ACCEPTED0.00 s1, 2, 3details
#3ACCEPTED0.00 s1, 3details
#4ACCEPTED0.00 s1, 3details
#5ACCEPTED0.08 s2, 3details
#60.08 s2, 3details
#70.10 s3details
#80.07 s3details
#9ACCEPTED0.09 s3details
#10ACCEPTED0.08 s3details

Code

#include <bits/stdc++.h>
#define ln "\n";
using namespace std;
using ll = long long;
ll n;
ll N = 1, itera = 1;
vector<ll> segT;
void update(ll k) {
    k += N;
    segT[k] = 0;
    k/=2;
    while(k >= 1) {
        segT[k] = max(segT[k*2],segT[k*2+1]);
        k/= 2;
    }
}
ll locate(ll x) {
    if(segT[1] <= x) {
        return -1;
    }
    ll start = 1;
    while(start < N) {
        if(segT[start*2] > x) {
            start*=2;
        } else {
            start = start*2+1;
        }
    }
    return start-N;
}
int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin >> n;

    while(N < n) {
        N = pow(itera,2);
        itera++;
    }
    segT.assign(2*N,0);
    vector<ll> vec(2*N,0);
    for(ll i = N-1; i < N+n-1; i++) {
        cin >> segT[i];
        vec[i] = segT[i];
    }
    for(ll i = N-2; i > 0; i--) {
        segT[i] = max(segT[i*2],segT[i*2+1]);
    }
    // for(int i = 0; i <N*2; i++) cout << segT[i] << " ";
    // cout << ln;
    // update(locate(5));
    ll c = 0;
    vector<vector<ll>> lists;
    for(ll i= N-1; i < N+n-1; i++) {
        if(segT[i] == 0) continue;
        c++;
        ll val = locate(segT[i]);
        vector<ll> temp;
        temp.push_back(vec[i]);
        update(i-N);
        while(val != -1) {
            temp.push_back(vec[val+N]);
            update(val);
            ll t = val;
            // for(int j = 0; j <N*2; j++) cout << segT[j] << " ";
            // cout << ln;
            // cout << vec[t+N] << ln;
            val = locate(vec[t+N]);
        }
        lists.push_back(temp);
    }
    cout << c << ln;
    for(vector<ll> list:lists) {
        for(ll num :list) {
            cout << num << " ";
        }
        cout << ln;
    }
}

Test details

Test 1

Group: 1, 3

Verdict: ACCEPTED

input
1000
447773962 773442532 122816 137...

correct output
53
447773962 773442532 908719430 ...

user output
53
447773962 773442532 908719430 ...
Truncated

Test 2

Group: 1, 2, 3

Verdict: ACCEPTED

input
1000
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

correct output
1000




...

user output
1000




...
Truncated

Test 3

Group: 1, 3

Verdict: ACCEPTED

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

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

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

Test 4

Group: 1, 3

Verdict: ACCEPTED

input
1000
1000 999 998 997 996 995 994 9...

correct output
1000
1000 
999 
998 
997 
...

user output
1000
1000 
999 
998 
997 
...
Truncated

Test 5

Group: 2, 3

Verdict: ACCEPTED

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

correct output
200000




...

user output
200000




...
Truncated

Test 6

Group: 2, 3

Verdict:

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

correct output
20776
5 10 
2 6 10 
1 5 7 9 10 
5 7 8 9 10 
...

user output
50425
5 7 9 10 
2 5 6 8 9 10 
1 2 3 7 8 9 10 
10 
...
Truncated

Test 7

Group: 3

Verdict:

input
200000
591414747 75940263 760367935 9...

correct output
879
591414747 760367935 901888417 ...

user output
1157
591414747 614573216 774462403 ...
Truncated

Test 8

Group: 3

Verdict:

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

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

user output
2
1 61442 61443 61444 61445 6144...
Truncated

Test 9

Group: 3

Verdict: ACCEPTED

input
200000
200000 199999 199998 199997 19...

correct output
200000
200000 
199999 
199998 
199997 
...

user output
200000
200000 
199999 
199998 
199997 
...
Truncated

Test 10

Group: 3

Verdict: ACCEPTED

input
200000
199999 199997 199995 199993 19...

correct output
100000
199999 200000 
199997 199998 
199995 199996 
199993 199994 
...

user output
100000
199999 200000 
199997 199998 
199995 199996 
199993 199994 
...
Truncated