Cod sursa(job #2078265)

Utilizator PruteanuTheoPruteanu Theodor PruteanuTheo Data 29 noiembrie 2017 10:34:13
Problema Subsir crescator maximal Scor 95
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <cstdio>
#include <vector>
#include <algorithm>

using namespace std;

vector <int> q,p,v;
vector <int>::iterator it;
vector <int> sol;

int main()
{
    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);
    int n,i,x;
    scanf("%d",&n);
    for(int i=1;i<=n;++i){
        scanf("%d",&x);
        v.push_back(x);
    }
    q.push_back(v[0]);
    p.assign(n+1,0);
    p.push_back(1);
    for(i=1;i<n;++i)
    {
        it=lower_bound(q.begin(),q.end(),v[i]);
        int poz=(int)(it-q.begin());
        if(it!=q.end())
           q[poz]=v[i];
        else
            q.push_back(v[i]);
        p[i]=poz;
    }
    printf("%d\n",q.size());
    int y=q.size()-1;
    for(int i=p.size();i>=0;--i)
    {
        if(p[i]==y){
            sol.push_back(v[i]);
            --y;
        }
    }
    reverse(sol.begin(),sol.end());
    for(it=sol.begin();it!=sol.end();++it)
        printf("%d ",*it);
    return 0;
}