Cod sursa(job #1252435)

Utilizator ZimmyZimmermann Erich Zimmy Data 30 octombrie 2014 18:50:39
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include <fstream>
#define oo 2000000010
#define N 100010
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n,a[N],I[N],V[N],B[N],lo,hi,mi,i,lmax;
void afiseaza(int);
int main()
{
    fin>>n;
    for(i=1;i<=n;i++)
    {
        fin>>a[i];
        V[i]=oo;
    }

    for(i=1;i<=n;i++)
    {
        lo=0;hi=lmax+1;
        while(hi-lo>1)
        {
            mi=(lo+hi)/2;
            if(V[mi]<a[i])lo=mi;
            else hi=mi;
        }
        B[i]=I[lo];
        if(V[hi]==oo)lmax++;
        if(a[i]<V[hi])
        {
            V[hi]=a[i];I[hi]=i;
        }
    }
    fout<<lmax<<'\n';
    afiseaza(I[lmax]);
    return 0;
}
void afiseaza(int poz)
{
    if(!poz)return;
    afiseaza(B[poz]);
    fout<<a[poz]<<' ';
}