Cod sursa(job #880026)

Utilizator bratiefanutBratie Fanut bratiefanut Data 16 februarie 2013 10:28:37
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <fstream>
#define nmax 100000
#define inf 2000000002
using namespace std;

ifstream f("scmax.in");
ofstream g("scmax.out");

int n,a[nmax],p[nmax],q[nmax],i,l,st[nmax],k,t;

int cautbin(int st, int dr, int x)
{
    int m=0;
    while(st<dr)
    {
        m=(st+dr)/2;
        if(q[m]>=x)
        dr=m;
        else
        st=m+1;
    }
    return st;
}

int main()
{
    f>>n;
    for(i=1;i<=n;i++)
    {
        f>>a[i];
        q[i]=inf;
    }

    k=0;
    for(i=1;i<=n;i++)
    {
        k=cautbin(1,l+1,a[i]);
        if(q[k]==inf)
        l++;

        q[k]=a[i];
        p[i]=k;
    }

    g<<l<<"\n";

    k=0;
    for(int i=n;i;--i)
    if(p[i]==l)
    st[++k]=a[i],--l;

    for(int i=k;i;--i)
    g<<st[i]<<' ';
    return 0;
}