Submission details
Task:Zigzag
Sender:Häviö Life
Submission time:2015-09-16 16:52:41 +0300
Language:C++
Status:READY
Result:ACCEPTED
Test results
testverdicttime
#1ACCEPTED0.07 sdetails
#2ACCEPTED0.10 sdetails
#3ACCEPTED0.12 sdetails
#4ACCEPTED0.08 sdetails
#5ACCEPTED0.08 sdetails
#6ACCEPTED0.09 sdetails
#7ACCEPTED0.10 sdetails
#8ACCEPTED0.09 sdetails
#9ACCEPTED0.09 sdetails
#10ACCEPTED0.10 sdetails
#11ACCEPTED0.09 sdetails
#12ACCEPTED0.10 sdetails
#13ACCEPTED0.10 sdetails
#14ACCEPTED0.09 sdetails
#15ACCEPTED0.11 sdetails
#16ACCEPTED0.11 sdetails
#17ACCEPTED0.10 sdetails
#18ACCEPTED0.13 sdetails
#19ACCEPTED0.13 sdetails
#20ACCEPTED0.12 sdetails
#21ACCEPTED0.11 sdetails
#22ACCEPTED0.09 sdetails
#23ACCEPTED0.05 sdetails

Code

#include <iostream>
#include <vector>
#include <stack>
#include <queue>
#include <algorithm>
#include <cmath>
#include <iomanip>
#include <unordered_set>
#include <stdio.h>
#include <string.h>
#include <unordered_map>
#include <fstream>
#include <set>
#include <map>

#define MOD 1000000007
#define ll long long
#define N (1<<17)
#define float double

using namespace std;

int nytA[2*N];
int nytY[2*N];

void set_val(int i, int val, int *spuu){
    i+=N;
    spuu[i]=val;
    i/=2;
    while(i){
        spuu[i]=max(spuu[2*i],spuu[2*i+1]);
        i/=2;
    }
}

int query_max(int l, int r, int* spuu){
    int v=0;
    l+=N;r+=N;

    while(l<r){
        if(l%2==1){
            v=max(v,spuu[l]);
            l++;
        }
        if(r%2==0){
            v=max(v,spuu[r]);
            r--;
        }
        r/=2;l/=2;
    }
    if(l==r)
        v=max(v,spuu[l]);
    return v;
}

int m_pre[100000];
int m_cp[100000];
int m[100000];

int main(){
    int n;
    cin>>n;
    for(int i=0; i<n; i++)
        cin>>m_pre[i];
    for(int i=0; i<n; i++)
        m_cp[i]=m_pre[i];
    sort(m_pre,m_pre+n);
    unordered_map<int,int> comp;
    int temp=0;
    comp[m_pre[0]]=temp;
    for(int i=1; i<n; i++){
        if(m_pre[i]!=m_pre[i+1]){
            temp++;
            comp[m_pre[i]]=temp;
        }
    }

    for(int i=0; i<n; i++)
        m[i]=comp[m_cp[i]];

    int vast=0;
    for(int i=0; i<n; i++){
        int yl=query_max(0,m[i]-1,nytA) + 1;
        int al=query_max(m[i]+1,100001,nytY)+1;
        vast=max(vast,max(yl,al));
        set_val(m[i], yl, nytY);
        set_val(m[i], al, nytA);
    }

    cout<<vast<<endl;

    return 0;
}

Test details

Test 1

Verdict: ACCEPTED

input
26914
209563339 493138663 352519700 ...

correct output
17861

user output
17861

Test 2

Verdict: ACCEPTED

input
69623
448426297 297876050 307483466 ...

correct output
46402

user output
46402

Test 3

Verdict: ACCEPTED

input
74436
633012861 731816315 697620472 ...

correct output
49602

user output
49602

Test 4

Verdict: ACCEPTED

input
40279
561990353 513856090 901866509 ...

correct output
26955

user output
26955

Test 5

Verdict: ACCEPTED

input
51496
683270487 631068160 190804676 ...

correct output
34326

user output
34326

Test 6

Verdict: ACCEPTED

input
97124
1000007 1000006 1000003 100000...

correct output
61495

user output
61495

Test 7

Verdict: ACCEPTED

input
91945
1000005 1000005 1000006 100000...

correct output
58521

user output
58521

Test 8

Verdict: ACCEPTED

input
96629
1000004 1000010 1000003 100001...

correct output
61327

user output
61327

Test 9

Verdict: ACCEPTED

input
92161
1000042 1000001 1000055 100001...

correct output
60962

user output
60962

Test 10

Verdict: ACCEPTED

input
96806
1000057 1000002 1000011 100006...

correct output
64127

user output
64127

Test 11

Verdict: ACCEPTED

input
99118
1000084 1000083 1000002 100008...

correct output
66012

user output
66012

Test 12

Verdict: ACCEPTED

input
98412
1000959 1000993 1000257 100064...

correct output
65720

user output
65720

Test 13

Verdict: ACCEPTED

input
90443
1000341 1000111 1000853 100021...

correct output
60148

user output
60148

Test 14

Verdict: ACCEPTED

input
94265
1000087 1000461 1000534 100020...

correct output
62824

user output
62824

Test 15

Verdict: ACCEPTED

input
91433
1001939 1009857 1000325 100505...

correct output
60938

user output
60938

Test 16

Verdict: ACCEPTED

input
96457
1005466 1001970 1000639 100288...

correct output
64111

user output
64111

Test 17

Verdict: ACCEPTED

input
91928
1003162 1008129 1007967 100683...

correct output
61129

user output
61129

Test 18

Verdict: ACCEPTED

input
96494
1076481 1008804 1047323 102583...

correct output
64214

user output
64214

Test 19

Verdict: ACCEPTED

input
98136
1025253 1017437 1050227 105377...

correct output
65345

user output
65345

Test 20

Verdict: ACCEPTED

input
90294
1098032 1037085 1089672 105311...

correct output
60164

user output
60164

Test 21

Verdict: ACCEPTED

input
100000
19836 85811 67650 86807 50191 ...

correct output
66639

user output
66639

Test 22

Verdict: ACCEPTED

input
100000
999999998 999999999 999999996 ...

correct output
59975

user output
59975

Test 23

Verdict: ACCEPTED

input
11
1000000000 1000000000 10000000...

correct output
4

user output
4