Cod sursa(job #2350193)

Utilizator alex2kamebossPuscasu Alexandru alex2kameboss Data 21 februarie 2019 10:07:42
Problema Subsir crescator maximal Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include <iostream>
#include <cstdio>
#include <vector>

using namespace std;

int a[100005], e[100005];
vector <int> q;
int n, l=1;

int cautBin(int val){
    int st = 1, dr = l-1, mij;
    while(st<=dr){
        if(st==dr)
            return st;
        mij = (st+dr)/2;
        if(val < q[mij])
            dr = mij;
        else
            st = mij+1;
    }
    return 0;
}

int main()
{
    q.push_back(0);
    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);

    scanf("%d", &n);
    for(int i=0;i<n;++i){
        scanf("%d", &a[i]);
        if(a[i]>q[l-1]){
            q.push_back(a[i]);
            e[i]=l;
            ++l;
        }
        else{
            int poz = cautBin(a[i]);
            q[poz] = a[i];
            e[i] = poz;
        }
    }

    --l;
    cout<<l<<"\n";
    vector <int> sol;

    int poz = n-1;
    for(int i=0;i<l;++i){
        for(int j=poz;j>=0;--j)
            if(e[j]==l-i){
                sol.push_back(a[j]);
                poz=j-1;
                break;
            }
    }

    for(int i=l-1;i>=0;--i)
        cout<<sol[i]<<" ";

    return 0;
}