Cod sursa(job #2208724)

Utilizator HannaLieb Hanna Hanna Data 31 mai 2018 08:47:38
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

ifstream cin("smax.in");
ofstream cout("smax.out");

int n,i,lh,k,l;

int main()
{
    cin>>n;
    vector<int>x(n+1);
    for(i=1;i<=n;++i)
        cin>>x[i];

    vector<int>s;
    vector<int>h(n+1);

    s.push_back(x[1]);
    h[0]=1;

    for(i=2;i<=n;++i)
    {
        if(x[i]>s[lh])
        {
            lh++;
            s.push_back(x[i]);
            h[i]=lh;
        }
        else
        {
            k=lower_bound(s.begin(), s.end(), x[i])-s.begin();
            s[k]=x[i];
            h[i]=k;
        }
    }

    cout<<lh+1<<"\n";

    int megold[lh+1];
    l=lh+1;
    for(i=n;i>=1;--i)
    {
        if(h[i]==lh)
        {
            megold[lh+1]=x[i];
            lh--;
        }
    }

    for(i=1;i<=l;++i) cout<<megold[i]<<" ";

    return 0;
}