CSES - Datatähti 2020 loppu - Results
Submission details
Task:Riippuliito
Sender:Unto Karila
Submission time:2020-02-09 14:17:22 +0200
Language:C++ (C++11)
Status:READY
Result:0
Feedback
groupverdictscore
#10
#20
#30
Test results
testverdicttimegroup
#10.01 s1, 2, 3details
#2ACCEPTED0.01 s1, 2, 3details
#3ACCEPTED0.01 s1, 2, 3details
#4ACCEPTED0.01 s1, 2, 3details
#5ACCEPTED0.01 s1, 2, 3details
#60.01 s1, 2, 3details
#7ACCEPTED0.01 s1, 2, 3details
#80.01 s2, 3details
#9ACCEPTED0.01 s2, 3details
#10ACCEPTED0.01 s2, 3details
#110.01 s2, 3details
#120.01 s2, 3details
#13ACCEPTED0.01 s2, 3details
#14ACCEPTED0.01 s2, 3details
#150.29 s3details
#16ACCEPTED0.34 s3details
#17ACCEPTED0.26 s3details
#180.31 s3details
#19ACCEPTED0.40 s3details
#20ACCEPTED0.48 s3details
#210.43 s3details
#22ACCEPTED0.01 s1, 2, 3details
#230.01 s1, 2, 3details
#24ACCEPTED0.01 s1, 2, 3details
#25ACCEPTED0.01 s1, 2, 3details
#26ACCEPTED0.01 s1, 2, 3details
#27ACCEPTED0.01 s1, 2, 3details
#28ACCEPTED0.01 s1, 2, 3details
#29ACCEPTED0.01 s1, 2, 3details

Code

#include <bits/stdc++.h>
#define ll long long
#define P 1000000007
#define N (1<<18)
#define F first
#define S second

using namespace std;

int hseg[2*N], valseg[2*N];
pair<int, int> ord[N];
int val[N];

void add(int i, int o, int *seg){
	i += N;
	for(; i>0; i/=2){
		seg[i] = max(seg[i], o);
	}
}

int sum(int a, int b, int *seg){
	a += N;
	b += N;
	int s = 0;
	while(a<=b){
		if(a&1) s = max(s, seg[a++]);
		if(~b&1) s = max(s, seg[b--]);
		a /= 2;
		b /= 2;
	}
	return s;
}

int main(){

	int n;
	cin >> n;

	for(int i=0; i<n; i++){
		int h;
		cin >> h;
		ord[i] = {h, i};
		add(i, h, hseg);
	}

	sort(ord, ord+n);

	for(int i=0; i<n; i++){
		int a = ord[i].S;
		int h = ord[i].F;

		int nval = 0;

		int k = a+1;
		for(int b=N/2; b>0; b/=2){
			while(a+k < n && sum(a+1, k+b, hseg) < h) k += b;
		}

		nval = max(nval, sum(a+1, k, valseg)+1);

		k = a-1;
		for(int b=N/2; b>0; b/=2){
			while(k-b >= 0 && sum(k-b, a-1, hseg) < h) k -= b;
		}

		nval = max(nval, sum(k, a-1, valseg)+1);

		add(a, nval, valseg);
	}

	cout << sum(0, n-1, valseg) << endl;

}

Test details

Test 1

Group: 1, 2, 3

Verdict:

input
10
1 1 1 1 1 1 1 1 1 1

correct output
1

user output
10

Test 2

Group: 1, 2, 3

Verdict: ACCEPTED

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

correct output
10

user output
10

Test 3

Group: 1, 2, 3

Verdict: ACCEPTED

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

correct output
10

user output
10

Test 4

Group: 1, 2, 3

Verdict: ACCEPTED

input
10
10 9 6 10 10 3 6 7 6 5

correct output
4

user output
4

Test 5

Group: 1, 2, 3

Verdict: ACCEPTED

input
10
51 90 27 98 85 47 14 55 82 52

correct output
6

user output
6

Test 6

Group: 1, 2, 3

Verdict:

input
10
9 65 90 86 45 52 52 95 40 85

correct output
5

user output
6

Test 7

Group: 1, 2, 3

Verdict: ACCEPTED

input
10
3 46 77 16 59 32 22 41 87 89

correct output
7

user output
7

Test 8

Group: 2, 3

Verdict:

input
5000
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

correct output
1

user output
5000

Test 9

Group: 2, 3

Verdict: ACCEPTED

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

correct output
5000

user output
5000

Test 10

Group: 2, 3

Verdict: ACCEPTED

input
5000
5000 4999 4998 4997 4996 4995 ...

correct output
5000

user output
5000

Test 11

Group: 2, 3

Verdict:

input
5000
10 8 10 5 4 9 2 9 10 10 1 2 7 ...

correct output
9

user output
11

Test 12

Group: 2, 3

Verdict:

input
5000
655923386 310000737 281882248 ...

correct output
28

user output
27

Test 13

Group: 2, 3

Verdict: ACCEPTED

input
5000
123456789 123456790 123456791 ...

correct output
2706

user output
2706

Test 14

Group: 2, 3

Verdict: ACCEPTED

input
5000
123456789 123456790 123456791 ...

correct output
5000

user output
5000

Test 15

Group: 3

Verdict:

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

correct output
1

user output
200000

Test 16

Group: 3

Verdict: ACCEPTED

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

correct output
200000

user output
200000

Test 17

Group: 3

Verdict: ACCEPTED

input
200000
200000 199999 199998 199997 19...

correct output
200000

user output
200000

Test 18

Group: 3

Verdict:

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

correct output
10

user output
13

Test 19

Group: 3

Verdict: ACCEPTED

input
200000
824527039 112439661 517794857 ...

correct output
43

user output
43

Test 20

Group: 3

Verdict: ACCEPTED

input
200000
123456789 123456790 123456791 ...

correct output
30764

user output
30764

Test 21

Group: 3

Verdict:

input
200000
123456789 123456790 123456791 ...

correct output
61367

user output
123476236

Test 22

Group: 1, 2, 3

Verdict: ACCEPTED

input
1
1

correct output
1

user output
1

Test 23

Group: 1, 2, 3

Verdict:

input
2
1 1

correct output
1

user output
2

Test 24

Group: 1, 2, 3

Verdict: ACCEPTED

input
2
1 2

correct output
2

user output
2

Test 25

Group: 1, 2, 3

Verdict: ACCEPTED

input
2
2 1

correct output
2

user output
2

Test 26

Group: 1, 2, 3

Verdict: ACCEPTED

input
3
1 2 1

correct output
2

user output
2

Test 27

Group: 1, 2, 3

Verdict: ACCEPTED

input
3
1 2 3

correct output
3

user output
3

Test 28

Group: 1, 2, 3

Verdict: ACCEPTED

input
3
3 2 1

correct output
3

user output
3

Test 29

Group: 1, 2, 3

Verdict: ACCEPTED

input
3
2 1 2

correct output
2

user output
2