Cod sursa(job #1828593)

Utilizator teodorgTeodor G teodorg Data 13 decembrie 2016 17:03:10
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <fstream>

using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
const int N=100010;
int n,i,j,x[N],link[N],p[N],v[N],L,lo,hi,mi;
int main()
{
    f>>n;
    for(i=1; i<=n; i++)
        f>>x[i];
    v[1]=x[1];
    p[1]=1;
    L=1;
    for(i=2;i<=n;i++)
    {
        if(x[i]>v[L])
        {
            L++;
            v[L]=x[i];
            p[L]=i;
            link[i]=p[L-1];
            continue;
        }
        lo=0;
        hi=L;
        while(lo<hi-1)
        {
            mi=(lo+hi)/2;
            if(v[mi]<x[i])
                lo=mi;
            else
                hi=mi;
        }
        link[i]=p[lo];
        if(x[i]<v[hi])
        {
            v[hi]=x[i];
            p[hi]=i;
        }
    }
    for(i=p[L],j=L;j>=1;j--,i=link[i])
        v[j]=x[i];
    g<<L<<'\n';
    for(i=1;i<=L;i++)
        g<<v[i]<<' ';



    return 0;
}