CSES - BAPC 2017 - Results
Submission details
Task:Manhattan Mornings
Sender:Antti Röyskö
Submission time:2017-10-24 18:16:09 +0300
Language:C++
Status:READY
Result:ACCEPTED
Test results
testverdicttime
#1ACCEPTED0.05 sdetails
#2ACCEPTED0.04 sdetails
#3ACCEPTED0.04 sdetails
#4ACCEPTED0.04 sdetails
#5ACCEPTED0.06 sdetails
#6ACCEPTED0.03 sdetails
#7ACCEPTED0.04 sdetails
#8ACCEPTED0.04 sdetails
#9ACCEPTED0.05 sdetails
#10ACCEPTED0.04 sdetails
#11ACCEPTED0.04 sdetails
#12ACCEPTED0.04 sdetails
#13ACCEPTED0.04 sdetails
#14ACCEPTED0.04 sdetails
#15ACCEPTED0.05 sdetails
#16ACCEPTED0.04 sdetails
#17ACCEPTED0.06 sdetails
#18ACCEPTED0.04 sdetails
#19ACCEPTED0.12 sdetails
#20ACCEPTED0.05 sdetails
#21ACCEPTED0.09 sdetails
#22ACCEPTED0.09 sdetails
#23ACCEPTED0.08 sdetails
#24ACCEPTED0.09 sdetails
#25ACCEPTED0.08 sdetails
#26ACCEPTED0.04 sdetails
#27ACCEPTED0.05 sdetails
#28ACCEPTED0.14 sdetails
#29ACCEPTED0.12 sdetails
#30ACCEPTED0.10 sdetails
#31ACCEPTED0.12 sdetails
#32ACCEPTED0.04 sdetails
#33ACCEPTED0.04 sdetails
#34ACCEPTED0.09 sdetails
#35ACCEPTED0.11 sdetails
#36ACCEPTED0.12 sdetails
#37ACCEPTED0.09 sdetails
#38ACCEPTED0.07 sdetails
#39ACCEPTED0.10 sdetails
#40ACCEPTED0.12 sdetails
#41ACCEPTED0.08 sdetails
#42ACCEPTED0.07 sdetails
#43ACCEPTED0.08 sdetails

Compiler report

input/code.cpp: In function 'int main()':
input/code.cpp:38:34: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 0; i < places.size(); ++i) {
                                  ^

Code

#include <iostream>
#include <set>
#include <utility>
#include <vector>
#include <algorithm>

int main() {
	std::ios_base::sync_with_stdio(false);
	std::cin.tie(0);
	
	int n;
	std::cin >> n;

	int sx, sy, wx, wy;
	std::cin >> sx >> sy >> wx >> wy;
	if (sx > wx) {
		int temp = sx;
		sx = wx;
		wx = temp;
		temp = sy;
		sy = wy;
		wy = temp;
	}
	int dir = 1;
	if (wy < sy) {
		dir = -1;
	}

	std::vector<std::pair<int, int>> places;
	for (int i = 0; i < n; ++i) {
		int x, y;
		std::cin >> x >> y;
		places.push_back({x, dir * y});
	}
	std::sort(places.begin(), places.end());
	std::set<std::pair<int, int>> best;
	best.insert({dir * sy,0});
	for (int i = 0; i < places.size(); ++i) {
		int x = places[i].first;
		int y = places[i].second * dir;
		if (x < sx) continue;
		if (x > wx) break;
		auto point = best.upper_bound({dir * y, n});
		if (point == best.begin()) {
			continue;
		} else {
			--point;
			int val = 1 + point->second;
			while(true) {
				point = best.upper_bound({dir * y, val});
				if (point == best.end()) break;
				if (point->second <= val) {
					best.erase(point);
				} else {
					break;
				}
			}
			best.insert({dir * y, val});
		}
	}
	/*
	for (auto at : best) {
		std::cout << at.first << ' ' << at.second << '\n';
	}
	*/
	auto point = best.upper_bound({dir * wy, n});
	if (point == best.begin()) {
		std::cout << "0\n";
	} else {
		--point;
		std::cout << point->second << '\n';
	}
}

Test details

Test 1

Verdict: ACCEPTED

input
10001
100 10100 10100 100
100 100
101 101
102 102
...

correct output
1

user output
1

Test 2

Verdict: ACCEPTED

input
51
100 80 50 130
50 80
51 81
52 82
...

correct output
1

user output
1

Test 3

Verdict: ACCEPTED

input
100
100 100 200 200
151 190
102 196
120 198
...

correct output
15

user output
15

Test 4

Verdict: ACCEPTED

input
100
100 100 200 200
107 116
106 198
110 110
...

correct output
17

user output
17

Test 5

Verdict: ACCEPTED

input
10001
100 100 10100 10100
100 100
101 101
102 102
...

correct output
10001

user output
10001

Test 6

Verdict: ACCEPTED

input
51
0 80 50 130
0 80
1 81
2 82
...

correct output
51

user output
51

Test 7

Verdict: ACCEPTED

input
50
10 10 20 10
21 9
13 9
15 11
...

correct output
16

user output
16

Test 8

Verdict: ACCEPTED

input
50
10 10 10 20
11 13
10 16
11 12
...

correct output
18

user output
18

Test 9

Verdict: ACCEPTED

input
1000
20 20 60 60
59 42
34 21
35 41
...

correct output
72

user output
72

Test 10

Verdict: ACCEPTED

input
1000
60 20 20 60
59 42
34 21
35 41
...

correct output
70

user output
70

Test 11

Verdict: ACCEPTED

input
50
10 20 10 10
11 13
10 16
11 12
...

correct output
18

user output
18

Test 12

Verdict: ACCEPTED

input
1000
20 60 60 20
59 42
34 21
35 41
...

correct output
70

user output
70

Test 13

Verdict: ACCEPTED

input
1000
60 60 20 20
59 42
34 21
35 41
...

correct output
72

user output
72

Test 14

Verdict: ACCEPTED

input
50
20 10 10 10
21 9
13 9
15 11
...

correct output
16

user output
16

Test 15

Verdict: ACCEPTED

input
100
100 100 200 200
92 116
99 198
95 110
...

correct output
0

user output
0

Test 16

Verdict: ACCEPTED

input
100
100 100 200 200
203 116
210 198
206 110
...

correct output
0

user output
0

Test 17

Verdict: ACCEPTED

input
100
100 100 200 200
151 90
102 91
120 98
...

correct output
0

user output
0

Test 18

Verdict: ACCEPTED

input
100
100 100 200 200
151 201
102 202
120 209
...

correct output
0

user output
0

Test 19

Verdict: ACCEPTED

input
99856
0 0 315 315
0 0
0 1
0 2
...

correct output
631

user output
631

Test 20

Verdict: ACCEPTED

input
121
30 30 40 40
30 30
30 31
30 32
...

correct output
21

user output
21

Test 21

Verdict: ACCEPTED

input
100000
0 0 1000000000 1000000000
81777 81727
7139 7165
18678 18626
...

correct output
2000

user output
2000

Test 22

Verdict: ACCEPTED

input
100000
0 0 1000000000 1000000000
42065 47939
60860 69144
24315 25689
...

correct output
20

user output
20

Test 23

Verdict: ACCEPTED

input
100000
0 0 1000000000 1000000000
24711 24693
27493 27511
58083 58121
...

correct output
1000

user output
1000

Test 24

Verdict: ACCEPTED

input
100000
0 0 1000000000 1000000000
93337 93167
10108 10396
28728 28776
...

correct output
400

user output
400

Test 25

Verdict: ACCEPTED

input
100000
0 0 1000000000 1000000000
299880 999700120
999535510 464490
999907060 92940
...

correct output
4

user output
4

Test 26

Verdict: ACCEPTED

input
100
100 100 200 200
157 200
117 200
142 200
...

correct output
100

user output
100

Test 27

Verdict: ACCEPTED

input
100
100 100 200 200
130 173
130 131
130 118
...

correct output
100

user output
100

Test 28

Verdict: ACCEPTED

input
100000
0 0 1000000000 1000000000
897804452 627427519
606065659 628843521
477686514 492734427
...

correct output
622

user output
622

Test 29

Verdict: ACCEPTED

input
100000
0 0 100000 100000
95475 11246
59599 37233
71739 19501
...

correct output
615

user output
615

Test 30

Verdict: ACCEPTED

input
100000
0 0 300 300
13 285
52 40
158 178
...

correct output
1233

user output
1233

Test 31

Verdict: ACCEPTED

input
100000
0 0 10 10
6 4
1 9
8 9
...

correct output
17669

user output
17669

Test 32

Verdict: ACCEPTED

input
10
0 0 10 10
6 4
1 9
8 9
...

correct output
5

user output
5

Test 33

Verdict: ACCEPTED

input
1000
1234 76543 1265 76224
1545 76719
1199 76306
1305 76185
...

correct output
2

user output
2

Test 34

Verdict: ACCEPTED

input
100000
0 0 1000000000 1000000000
999998482 1518
999999380 620
52008 999947992
...

correct output
2001

user output
2001

Test 35

Verdict: ACCEPTED

input
100000
0 0 1000000000 1000000000
999960616 39384
39185 999960815
45237 999954763
...

correct output
201

user output
201

Test 36

Verdict: ACCEPTED

input
100000
0 0 1000000000 1000000000
999989308 10692
999998647 1353
44068 999955932
...

correct output
21

user output
21

Test 37

Verdict: ACCEPTED

input
100000
0 0 1000000000 1000000000
999955327 44673
999932388 67612
11879 999988121
...

correct output
1001

user output
1001

Test 38

Verdict: ACCEPTED

input
100000
0 0 1000000000 1000000000
0 0
1000000000 1000000000
1 999999999
...

correct output
101

user output
101

Test 39

Verdict: ACCEPTED

input
100000
0 0 1000000000 1000000000
62791 999937209
98083 999901917
999902435 97565
...

correct output
801

user output
801

Test 40

Verdict: ACCEPTED

input
100000
0 0 1000000000 1000000000
43604 999956396
80721 999919279
999958750 999958750
...

correct output
4001

user output
4001

Test 41

Verdict: ACCEPTED

input
100000
0 0 1000000000 1000000000
99142 999900858
60558 999939442
44046 999955954
...

correct output
401

user output
401

Test 42

Verdict: ACCEPTED

input
100000
0 0 1000000000 1000000000
56902 999943098
7395 999992605
76388 999923612
...

correct output
41

user output
41

Test 43

Verdict: ACCEPTED

input
100000
0 0 1000000000 1000000000
11427 999988573
23698 999976302
57515 999942485
...

correct output
5

user output
5