Cod sursa(job #430465)

Utilizator MKLOLDragos Ristache MKLOL Data 31 martie 2010 02:22:21
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include<stdio.h>
#define Nmax 100010
int Q[Nmax],P[Nmax],v[Nmax],N,Z;
void afis(int O)
{

char ok=1;
if(O==0)
return;
    for(int i=O;i>=1&&ok;--i)
    {
        if(P[i]==Z)
        {   ok=0;
            --Z;
            afis(i-1);
            printf("%d ",v[i]);
        }
    }
}
int insert(int x)
{
long long st=1,dr=Q[0],rez=0,mij;
while(st<=dr)
{
    mij=(st+dr)/2;
    if(Q[mij]>=x)
    {
    rez=mij;
    dr=mij-1;
    }
    else
    {
    st=mij+1;
    }
}
    if(rez)
    {
    Q[rez]=x;
    return rez;
    }
    if(!rez)
    {
    Q[++Q[0]]=x;
    return Q[0];
    }

}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&N);
for(int i=1;i<=N;++i)
    scanf("%d",&v[i]);

for(int i=1;i<=N;++i)
    {
    P[i]=insert(v[i]);
    }
Z=Q[0];
printf("%d\n",Q[0]);
afis(N);
return 0;
}