Cod sursa(job #1116664)

Utilizator PatrikStepan Patrik Patrik Data 22 februarie 2014 18:54:44
Problema Subsir crescator maximal Scor 65
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
    #include<cstdio>
    #include<vector>
    using namespace std;
    #define pb push_back
    int N;
    vector<int> v;

    void solve(int x);

    int main()
    {
        int x;
        freopen("scmax.in" , "r" , stdin );
        freopen("scmax.out" , "w" , stdout );
        scanf("%d" , &N );
        for(int i = 1 ; i <= N ; ++i )
        {
            scanf("%d" , &x);
            solve(x);
        }
        printf("%d\n" , v.size());
        for(int i = 0 ; i < (int)v.size() ; ++i )
            printf("%d " , v[i] );
        return 0 ;
    }

    void solve(int x)
    {
        int ls , ld, m;
        if(!v.size() || x > v[v.size()-1])
            v.pb(x);
        else
        {
            ld = v.size();ls = 0;
            while(ls <= ld)
            {
                m = (ls+ld)/2;
                if(v[m] == x)return;
                if(v[m] < x)ls = m+1;
                else
                    ld = m-1;
            }
            v[ls] = x;
        }

    }