Cod sursa(job #1511707)

Utilizator razvanlgu31Razvan Lungu razvanlgu31 Data 27 octombrie 2015 01:38:31
Problema Subsir crescator maximal Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <fstream>

using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n,i,v[100010],s[100010],l[100010],ns,ma,m,x,y,k,li,ls,g;


int main()
{
    fin>>n;
    for(i=1;i<=n;i++)
        fin>>v[i];
    ns=1;
    s[1]=v[1];
    l[1]=1;
    for(i=2;i<=n;i++)
    {
        if(v[i]>s[ns])
        {
            ns++;
            s[ns]=v[i];
            l[i]=l[i-1]+1;
        }
        else
        {
        x=v[i];
        li=1;
        ls=ns;
        while(li<=ls)
        {
            m=(li+ls)/2;
            if(s[m]==x){ns=m;g=1; break;}
            else
            if(x>s[m])li=m+1;
            else
            ls=m-1;
        }
        if(g!=1)ns=ls+1;
        s[ns]=x;
        l[i]=ns;
        }
    }
    for(i=1;i<=n;i++)
    if(l[i]>m){m=l[i]; ma=i;}
    fout<<m<<'\n';

    s[1]=v[ma];
    k=1;
    x=m-1;
    y=ma;
    for(i=n;i>=1;i--)
    {
        if(l[i]==x){k++; s[k]=v[i]; x-=1;}
    }
    for(i=k;i>=1;i--)
        fout<<s[i]<<" ";
    return 0;
}