CSES - Siperia opettaa 4.0 - Results
Submission details
Task:Archaeological Research
Sender:zxc
Submission time:2016-08-04 17:00:07 +0300
Language:C++
Status:READY
Result:100
Feedback
groupverdictscore
#1ACCEPTED100
Test results
testverdicttime
#1ACCEPTED0.06 sdetails
#2ACCEPTED0.06 sdetails
#3ACCEPTED0.05 sdetails
#4ACCEPTED0.06 sdetails
#5ACCEPTED0.06 sdetails
#6ACCEPTED0.06 sdetails
#7ACCEPTED0.05 sdetails
#8ACCEPTED0.06 sdetails
#9ACCEPTED0.06 sdetails
#10ACCEPTED0.15 sdetails
#11ACCEPTED0.14 sdetails
#12ACCEPTED0.06 sdetails
#13ACCEPTED0.06 sdetails
#14ACCEPTED0.07 sdetails
#15ACCEPTED0.20 sdetails
#16ACCEPTED0.57 sdetails
#17ACCEPTED0.20 sdetails
#18ACCEPTED0.59 sdetails
#19ACCEPTED0.06 sdetails
#20ACCEPTED0.05 sdetails
#21ACCEPTED0.06 sdetails
#22ACCEPTED0.06 sdetails
#23ACCEPTED0.08 sdetails
#24ACCEPTED0.11 sdetails
#25ACCEPTED0.21 sdetails
#26ACCEPTED0.42 sdetails
#27ACCEPTED0.21 sdetails
#28ACCEPTED0.21 sdetails
#29ACCEPTED0.21 sdetails
#30ACCEPTED0.21 sdetails
#31ACCEPTED0.46 sdetails
#32ACCEPTED0.45 sdetails
#33ACCEPTED0.47 sdetails
#34ACCEPTED0.49 sdetails

Code

#include <iostream>
#include <cstring>
#include <vector>
using namespace std;
const int MN = 5e5+100;
/*
struct Node {
    int ma = 0;
    Node * left;
    Node * right;
    Node(int v) {
        sum = v;
    }
}
Node * t[MN];
int ma(Node * a) {
    if(a == NULL) return 0;
    return a->ma;
}
int setValue(Node*& k, int l, int r, int x) {
    if(l > x || r < x) {
        return ma(k);
    }
    if(l == r) {
        Node * n2 = new Node(1);
        k = n2;
        return ma(k);
    }
    if(k == NULL) {
        k = new Node(0);
    }
    int mid = (l+r)/2;
    int q = setValue(k->left, l, mid, x);
    int w = setValue(k->right, mid+1, r, x);
    k->ma = max(q, w);
}
int lol = 0;
int find(Node* kb, Node *ke, int l, int r) {
    if(k2 == NULL) {
        return 0;
    }
    if(sum(k) == (r-l+1)) {
        lol = max(lol, r+1);
        return 1;
    }
    if(k == NULL) {
        return 0;
    }
    int mid = (l+r)/2;
    if(find(k->left, l, mid)) {
        find(k->right, mid+1, r);
    }
    return 0;
}
*/
const int N = 1<<19;
int st[2*N];
vector<int> t[MN];
int getMin(int a, int b) {
     a += N;
     b += N;
     int mi = 1e9;
     for(; a <= b; a/=2, b/=2) {
         if(a&1) mi = min(mi, st[a++]);
         if(~b&1) mi = min(mi, st[b--]);
     }
     return mi;
}
void setValue(int a, int v) {
    a += N;
    st[a] = v;
    for(a/=2; a; a/=2) {
        st[a] = min(st[a*2], st[a*2+1]);
    }
}

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    int n;
    cin>>n;
    cout<<1<<' ';
    for(int i = 0; i < n; ++i) {
        int c;
        cin>>c;
        for(int j = 0; j < c; ++j) {
            int x;
            cin>>x;
            --x;
            t[x].push_back(i);
        }
    }
    memset(st, -1, sizeof st);
    setValue(0, 1e9);
    for(int i = 1; i < n; ++i) {
        if(t[i].size() == 0) {
            setValue(1, i);
            cout<<1<<' ';
        }
        else {
            int ma = 1;
            for(int x: t[i]) {
                int b = x+1;
                int lo = 0;
                int hi = n;
                int best = 0;
                while(lo <= hi) {
                    int mid = (lo+hi)/2;
                    if(getMin(0, mid) >= b) {
                        best = mid;
                        lo = mid+1;
                    }
                    else {
                        hi = mid-1;
                    }
                }
                ma = max(ma, best+1);
            }
            cout<<ma<<' ';
            setValue(ma, i);
        }
    }
    cout<<endl;
}

Test details

Test 1

Verdict: ACCEPTED

input
4
3 2 3 4
2 4 3
1 4
0

correct output
1 1 2 3 

user output
1 1 2 3 

Test 2

Verdict: ACCEPTED

input
5
1 2
1 4
1 4
1 5
...

correct output
1 1 1 2 1 

user output
1 1 1 2 1 

Test 3

Verdict: ACCEPTED

input
1
0

correct output

user output

Test 4

Verdict: ACCEPTED

input
4
0
0
0
0

correct output
1 1 1 1 

user output
1 1 1 1 

Test 5

Verdict: ACCEPTED

input
10
1 10
1 9
1 8
1 7
...

correct output
1 1 1 1 1 1 2 3 4 5 

user output
1 1 1 1 1 1 2 3 4 5 

Test 6

Verdict: ACCEPTED

input
10
9 10 9 8 7 6 5 4 3 2
0
0
0
...

correct output
1 1 2 3 4 5 6 7 8 9 

user output
1 1 2 3 4 5 6 7 8 9 

Test 7

Verdict: ACCEPTED

input
20
14 2 3 4 5 6 7 8 9 10 12 14 16...

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

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

Test 8

Verdict: ACCEPTED

input
10
3 6 4 7
3 3 6 7
3 7 5 4
0
...

correct output
1 1 1 2 1 3 4 1 2 1 

user output
1 1 1 2 1 3 4 1 2 1 

Test 9

Verdict: ACCEPTED

input
100
4 8 29 3 14
4 29 17 5 11
8 8 14 17 19 10 29 5 11
4 7 11 19 14
...

correct output
1 1 2 1 3 1 2 4 1 5 6 1 2 7 3 ...

user output
1 1 2 1 3 1 2 4 1 5 6 1 2 7 3 ...

Test 10

Verdict: ACCEPTED

input
100000
1 5
0
0
1 21
...

correct output
1 1 1 1 2 1 1 1 1 1 2 1 1 3 1 ...

user output
1 1 1 1 2 1 1 1 1 1 2 1 1 3 1 ...

Test 11

Verdict: ACCEPTED

input
300000
0
0
0
0
...

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 12

Verdict: ACCEPTED

input
10
5 2 4 6 8 10
2 3 5
2 7 9
0
...

correct output
1 1 1 2 3 4 1 5 6 7 

user output
1 1 1 2 3 4 1 5 6 7 

Test 13

Verdict: ACCEPTED

input
1000
504 2 4 6 8 10 12 14 16 18 20 ...

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

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

Test 14

Verdict: ACCEPTED

input
10000
5006 2 4 6 8 10 12 14 16 18 20...

correct output
1 1 2 3 1 4 5 6 1 7 1 8 2 9 1 ...

user output
1 1 2 3 1 4 5 6 1 7 1 8 2 9 1 ...

Test 15

Verdict: ACCEPTED

input
100000
50001 2 4 6 8 10 12 14 16 18 2...

correct output
1 1 1 2 1 3 1 4 2 5 6 7 8 9 1 ...

user output
1 1 1 2 1 3 1 4 2 5 6 7 8 9 1 ...

Test 16

Verdict: ACCEPTED

input
300000
150003 2 4 6 8 10 12 14 16 18 ...

correct output
1 1 2 3 1 4 1 5 1 6 2 7 1 8 9 ...

user output
1 1 2 3 1 4 1 5 1 6 2 7 1 8 9 ...

Test 17

Verdict: ACCEPTED

input
100000
99999 2 3 4 5 6 7 8 9 10 11 12...

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

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

Test 18

Verdict: ACCEPTED

input
300000
299999 2 3 4 5 6 7 8 9 10 11 1...

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

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

Test 19

Verdict: ACCEPTED

input
10
6 3 10 5 7 2 6
4 9 7 3 5
4 9 4 6 8
2 9 6
...

correct output
1 1 2 1 3 4 5 2 6 7 

user output
1 1 2 1 3 4 5 2 6 7 

Test 20

Verdict: ACCEPTED

input
100
2 5 76
0
1 95
0
...

correct output
1 1 1 1 2 1 1 1 1 1 1 1 2 1 1 ...

user output
1 1 1 1 2 1 1 1 1 1 1 1 2 1 1 ...

Test 21

Verdict: ACCEPTED

input
100
42 10 58 79 63 54 85 98 93 12 ...

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

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

Test 22

Verdict: ACCEPTED

input
1000
3 159 391 64
2 873 937
2 778 683
4 834 451 612 77
...

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 23

Verdict: ACCEPTED

input
1000
128 727 119 723 512 20 702 768...

correct output
1 1 1 1 1 1 1 2 3 4 1 1 2 5 1 ...

user output
1 1 1 1 1 1 1 2 3 4 1 1 2 5 1 ...

Test 24

Verdict: ACCEPTED

input
10000
11 8022 4007 5739 6750 8840 92...

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 25

Verdict: ACCEPTED

input
10000
28 5794 5411 4358 9433 717 593...

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 26

Verdict: ACCEPTED

input
100000
4 48646 24905 713 44172
3 50179 91540 78627
4 20753 74464 38091 58997
3 29870 60334 51008
...

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 27

Verdict: ACCEPTED

input
10000
128 8450 9019 4143 8758 3101 2...

correct output
1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 ...

user output
1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 ...

Test 28

Verdict: ACCEPTED

input
10000
186 213 4022 6061 5193 6771 72...

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 29

Verdict: ACCEPTED

input
10000
319 8261 3202 7324 8009 3747 9...

correct output
1 1 1 1 1 1 1 2 1 1 1 1 1 3 1 ...

user output
1 1 1 1 1 1 1 2 1 1 1 1 1 3 1 ...

Test 30

Verdict: ACCEPTED

input
10000
589 2436 5025 2836 9734 5614 5...

correct output
1 1 1 1 1 1 1 2 1 3 1 4 1 2 5 ...

user output
1 1 1 1 1 1 1 2 1 3 1 4 1 2 5 ...

Test 31

Verdict: ACCEPTED

input
100000
19 25480 79606 99089 67483 481...

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 32

Verdict: ACCEPTED

input
100000
10 41727 71826 90941 24242 433...

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 33

Verdict: ACCEPTED

input
100000
34 68778 88879 77791 86202 693...

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

Verdict: ACCEPTED

input
100000
53 44024 90387 2670 24853 2560...

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 ...