Submission details
Task:Hacker
Sender:OOliOO_slayer
Submission time:2015-09-16 18:59:30 +0300
Language:C++
Status:READY
Result:
Test results
testverdicttime
#10.05 sdetails
#20.05 sdetails
#30.05 sdetails
#40.06 sdetails
#50.05 sdetails
#60.05 sdetails
#70.04 sdetails
#80.05 sdetails
#90.05 sdetails
#100.05 sdetails
#110.07 sdetails
#120.08 sdetails
#130.06 sdetails
#140.07 sdetails
#150.07 sdetails
#160.07 sdetails
#170.06 sdetails
#180.07 sdetails
#190.06 sdetails
#200.07 sdetails
#210.06 sdetails
#220.06 sdetails
#230.07 sdetails
#240.06 sdetails
#250.06 sdetails
#260.07 sdetails
#270.07 sdetails
#280.06 sdetails
#290.07 sdetails
#300.07 sdetails
#310.06 sdetails
#320.08 sdetails
#330.07 sdetails
#340.06 sdetails
#350.07 sdetails
#360.07 sdetails

Code

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

typedef long long LL;

using namespace std;

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    int n; cin >> n;
    vector<int> v;
    for(int i = 0; i < n; i++){
        int x; cin >> x; v.push_back(x);
    }
    vector<int> up(n), down(n), psv(n), pgv(n);
    up[0] = 1;
    down[0] = 1;
    psv[0] = -1; pgv[0] = -1;
    
    for(int i = 1; i < n; i++){
        if(v[i] == v[i-1]){
            up[i] = up[i-1];
            down[i] = down[i-1];
            psv[i] = psv[i-1];
            pgv[i] = pgv[i-1];
            continue;
        }
        else if(v[i] > v[i-1]){
            // Increasing
            psv[i] = i-1;
            int prev = pgv[i-1]; // Search for prev greater
            
            while(prev != -1 && v[prev] <= v[i]){
                prev = pgv[prev];
            }
            pgv[i] = prev;
        }
        else if(v[i] < v[i-1]){
            // Decreasing
            pgv[i] = i-1;
            int prev = psv[i-1];
            while(prev != -1 && v[prev] >= v[i]){
                prev = psv[prev];
            }
            psv[i] = prev;
        }
        up[i] = psv[i] == -1 ? 1 : down[psv[i]] + 1;
        down[i] = pgv[i] == -1 ? 1 : up[pgv[i]] + 1;
    }
    /*for(auto x : psv) cout << x << " "; cout << endl;
    for(auto x : pgv) cout << x << " "; cout << endl;
    for(auto x : up) cout << x << " "; cout << endl;
    for(auto x : down) cout << x << " "; cout << endl;*/
    
    int ans = 0;
    for(int i = 0; i < n; i++){
        ans = max(ans,up[i]);
        ans = max(ans,down[i]);
    }
    cout << ans << endl;
}


Test details

Test 1

Verdict:

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

correct output
1

user output
3

Test 2

Verdict:

input
2 1
2 1
1 1

correct output
1

user output
2

Test 3

Verdict:

input
4 2
1 3
3 4
2 1
3 1
...

correct output
1

user output
3

Test 4

Verdict:

input
8 4
3 8
3 7
3 2
5 8
...

correct output
1

user output
6

Test 5

Verdict:

input
8 2
1 5
2 1
5 4
7 5
...

correct output
1

user output
7

Test 6

Verdict:

input
88 58
16 63
16 55
45 16
16 76
...

correct output
1
16 

user output
45

Test 7

Verdict:

input
90 34
3 30
33 3
3 1
3 16
...

correct output
1
73 

user output
47

Test 8

Verdict:

input
68 64
65 37
26 37
37 2
37 16
...

correct output
1
14 

user output
38

Test 9

Verdict:

input
98 90
82 89
89 72
89 24
89 66
...

correct output
1
38 

user output
69

Test 10

Verdict:

input
45 43
16 24
11 24
24 14
39 16
...

correct output
1
11 

user output
31

Test 11

Verdict:

input
200000 10000
108969 124359
95689 6026
116305 139666
24031 23504
...

correct output
2269
100022 100029 100048 100187 10...

user output
71429

Test 12

Verdict:

input
200000 30000
149634 101097
7189 8578
110942 104503
110094 199531
...

correct output
12594
100006 100022 100025 100028 10...

user output
73452

Test 13

Verdict:

input
200000 10001
9664 10422
101570 162282
21567 87519
75017 10098
...

correct output
4469
100033 100068 100071 100074 10...

user output
71691

Test 14

Verdict:

input
200000 30001
192593 161643
133646 146752
70341 87021
85165 3436
...

correct output
646
100376 100431 100629 100865 10...

user output
73289

Test 15

Verdict:

input
200000 10003
182120 107802
111504 176786
116392 192800
39491 8466
...

correct output
1
187998 

user output
73974

Test 16

Verdict:

input
200000 30003
100234 176124
72445 20075
27078 77532
6054 17091
...

correct output
1013
100101 100226 100318 100331 10...

user output
73404

Test 17

Verdict:

input
200000 11000
144259 147062
129144 34375
27688 122452
149687 178943
...

correct output
9
68155 74343 92593 98229 103701...

user output
63217

Test 18

Verdict:

input
200000 20000
90535 65281
89691 120083
89310 122019
48389 89987
...

correct output
13
31911 56441 62585 103301 11475...

user output
60685

Test 19

Verdict:

input
200000 10010
126094 109522
32134 117141
77008 145100
95190 29985
...

correct output
841
150165 150222 150264 150414 15...

user output
68158

Test 20

Verdict:

input
200000 5000
125110 185897
185897 15293
185897 65525
32273 15293
...

correct output
1
120494 

user output
94311

Test 21

Verdict:

input
200000 10000
29178 72745
65717 29178
86262 72745
28578 72745
...

correct output
2
70740 146957 

user output
93018

Test 22

Verdict:

input
200000 100000
68474 3445
68474 188768
75980 188768
53957 75980
...

correct output
1
130925 

user output
94373

Test 23

Verdict:

input
200000 5000
199775 110116
20398 110116
131291 110116
20398 105072
...

correct output
1
142994 

user output
93175

Test 24

Verdict:

input
200000 10000
14706 98422
143108 14706
183282 14706
177517 14706
...

correct output
1
24321 

user output
94347

Test 25

Verdict:

input
200000 100000
98965 122949
80666 98965
98965 122727
80666 94692
...

correct output
1
89572 

user output
94520

Test 26

Verdict:

input
200000 5000
175908 116198
108345 116198
116198 46371
108738 175908
...

correct output
1
104870 

user output
97286

Test 27

Verdict:

input
200000 10000
72296 103083
173676 72296
72296 191544
38971 72296
...

correct output
1
1181 

user output
97289

Test 28

Verdict:

input
200000 100000
180193 90285
90285 3229
90285 191578
49699 90285
...

correct output
1
94989 

user output
97235

Test 29

Verdict:

input
200000 5000
149895 27443
149895 63596
162631 149895
77710 149895
...

correct output
3
9962 69107 158765 

user output
94821

Test 30

Verdict:

input
200000 10000
48685 181649
181649 86877
161760 181649
27659 181649
...

correct output
6
33818 96668 107877 151891 1746...

user output
94455

Test 31

Verdict:

input
200000 100000
11743 113918
11743 150916
11743 48160
183097 11743
...

correct output
2
3617 191200 

user output
94657

Test 32

Verdict:

input
200000 10000
99835 74128
188699 111418
188699 179102
88827 164875
...

correct output
93707
2 5 7 8 14 15 16 19 22 25 28 3...

user output
111245

Test 33

Verdict:

input
200000 10000
185678 126111
144054 64404
93775 80874
96138 119649
...

correct output
2789
41 44 92 148 187 303 372 435 5...

user output
109962

Test 34

Verdict:

input
200000 10000
96298 24580
141435 60260
62879 70753
62879 53651
...

correct output
93808
3 4 8 9 10 11 12 13 15 17 19 2...

user output
101605

Test 35

Verdict:

input
200000 10000
66867 107798
69585 26217
142260 2470
170968 66615
...

correct output
4
34912 58399 72540 82303 

user output
100763

Test 36

Verdict:

input
200000 10000
126978 125907
22968 95429
13651 161708
137033 59120
...

correct output
93766
3 7 8 10 13 14 16 18 19 24 25 ...

user output
102095