CSES - Datatähti 2020 loppu - Results
Submission details
Task:Riippuliito
Sender:Henrik Aalto
Submission time:2020-02-09 13:25:59 +0200
Language:C++11
Status:READY
Result:100
Feedback
groupverdictscore
#1ACCEPTED18
#2ACCEPTED21
#3ACCEPTED61
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 s2, 3details
#9ACCEPTED0.01 s2, 3details
#10ACCEPTED0.02 s2, 3details
#11ACCEPTED0.01 s2, 3details
#12ACCEPTED0.02 s2, 3details
#13ACCEPTED0.02 s2, 3details
#14ACCEPTED0.02 s2, 3details
#15ACCEPTED0.44 s3details
#16ACCEPTED0.50 s3details
#17ACCEPTED0.54 s3details
#18ACCEPTED0.52 s3details
#19ACCEPTED0.63 s3details
#20ACCEPTED0.65 s3details
#21ACCEPTED0.65 s3details
#22ACCEPTED0.01 s1, 2, 3details
#23ACCEPTED0.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

Compiler report

input/code.cpp: In function 'int main()':
input/code.cpp:66:13: warning: decomposition declaration only available with -std=c++1z or -std=gnu++1z
  for (auto &[x, id] : H) {
             ^
input/code.cpp:66:19: warning: unused variable 'x' [-Wunused-variable]
  for (auto &[x, id] : H) {
                   ^
input/code.cpp:58:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d", &N);
  ~~~~~^~~~~~~~~~
input/code.cpp:59:32: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  for (i = 1; i <= N; ++i) scanf("%d", &D[i]);
                           ~~~~~^~~~~~~~~~~~~

Code

#include "bits/stdc++.h"
using namespace std;
const int PN = 1 << 18;
int N, D[200100], Puu[PN * 2];
void Muuta(int k, int x) {
	k += PN;
	Puu[k] = x;
	while (k /= 2) Puu[k] = max(Puu[k * 2], Puu[k * 2 + 1]);
}
int Hae(int a, int b) {
	int r = 0;
	for (a += PN, b += PN; a <= b; a /= 2, b /= 2) {
		if (a % 2 == 1) r = max(r, Puu[a++]);
		if (b % 2 == 0) r = max(r, Puu[b--]);
	}
	return r;
}
int Puu1[PN * 2], Puu2[PN * 2];
void Push(int s) {
	if (!Puu2[s]) return;
	Puu1[s] = max(Puu1[s], Puu2[s]);
	if (s < PN) {
		Puu2[s * 2] = max(Puu2[s * 2], Puu2[s]);
		Puu2[s * 2 + 1] = max(Puu2[s * 2 + 1], Puu2[s]);
		Puu1[s * 2] = max(Puu1[s * 2], Puu2[s]);
		Puu1[s * 2 + 1] = max(Puu1[s * 2 + 1], Puu2[s]);
	}
	Puu2[s] = 0;
}
void LMuuta(int L, int R, int l, int r, int s, int x) {
	Push(s);
	if (r < L || R < l) return;
	if (L <= l && r <= R) {
		Puu1[s] = max(Puu1[s], x);
		Puu2[s] = max(Puu2[s], x);
		Push(s);
	} else {
		int m = (l + r) / 2;
		LMuuta(L, R, l, m, s * 2, x);
		LMuuta(L, R, m + 1, r, s * 2 + 1, x);
		Puu1[s] = max(Puu1[s * 2], Puu1[s * 2 + 1]);
	}
}
int LHae(int L, int R, int l, int r, int s) {
	Push(s);
	if (r < L || R < l) return 0;
	if (L <= l && r <= R) {
		return Puu1[s];
	}
	int m = (l + r) / 2;
	return max(
		LHae(L, R, l, m, s * 2),
		LHae(L, R, m + 1, r, s * 2 + 1)
	);
}
int main() {
	int i;
	scanf("%d", &N);
	for (i = 1; i <= N; ++i) scanf("%d", &D[i]);
	for (i = 1; i <= N; ++i) Muuta(i, D[i]);
	vector<pair<int, int>> H;
	for (i = 1; i <= N; ++i) H.emplace_back(D[i], i);
	sort(H.begin(), H.end());
	reverse(H.begin(), H.end());
	LMuuta(1, N, 1, PN, 1, 1);
	for (auto &[x, id] : H) {
		int K = LHae(id, id, 1, PN, 1);
		// printf("tulos: %d = %d\n", id, K);
		int b = 0;
		for (int z = 1 << 18; z; z /= 2) {
			if (b + z + id <= N && Hae(id + 1, id + b + z) < D[id]) b += z;
		}
		if (b) LMuuta(id + 1, id + b, 1, PN, 1, K + 1);
		b = 0;
		for (int z = 1 << 18; z; z /= 2) {
			if (id - (b + z) >= 1 && Hae(id - (b + z), id - 1) < D[id]) b += z;
		}
		if (b) LMuuta(id - b, id - 1, 1, PN, 1, K + 1);
	}
	printf("%d\n", Puu1[1]);
}

Test details

Test 1

Group: 1, 2, 3

Verdict: ACCEPTED

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

correct output
1

user output
1

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: ACCEPTED

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

correct output
5

user output
5

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: ACCEPTED

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

correct output
1

user output
1

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: ACCEPTED

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

correct output
9

user output
9

Test 12

Group: 2, 3

Verdict: ACCEPTED

input
5000
655923386 310000737 281882248 ...

correct output
28

user output
28

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: ACCEPTED

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

correct output
1

user output
1

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: ACCEPTED

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

correct output
10

user output
10

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: ACCEPTED

input
200000
123456789 123456790 123456791 ...

correct output
61367

user output
61367

Test 22

Group: 1, 2, 3

Verdict: ACCEPTED

input
1
1

correct output
1

user output
1

Test 23

Group: 1, 2, 3

Verdict: ACCEPTED

input
2
1 1

correct output
1

user output
1

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