Cod sursa(job #1506360)

Utilizator razvanlgu31Razvan Lungu razvanlgu31 Data 20 octombrie 2015 15:36:58
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 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;
void (int s[],int x,int &ns)
{
    int le=1,d=ns,m=0;
    while(l<d)
    {
        m=(le+d)/2;
        if(x<s[m])d=m-1;
        else
            if(x>s[m])le=m+1
            else
        {
            ns=m;
            break;
        }
    }
    if(ns!=m)ns=l+1;
}
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]++;
        }
        else
        {
            x=v[i];
            bin(s,x,ns)
            s[ns]=x;
            l[i]=ns;
        }
    }
    for(i=1;i<=n;i++)
    if(l[i]>m){m=l[i]; ma=i;}
    fout<<m<<'\n'<<v[ma]<<" ";
    x=m-1;
    y=ma;
    while (x!=1)
    {
        if(l[y]==x){fout<<v[y]; x--;}
        y--;
    }
    return 0;
}