Cod sursa(job #1627093)

Utilizator Marius7122FMI Ciltea Marian Marius7122 Data 3 martie 2016 14:17:44
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <stdio.h>
FILE *f1,*f2;
long x,v[100002],i,n,q,li,ls,m,c[100002];
unsigned l[100002],gasit;

void afis(long n,long i)
{
    if(n==0)
        return;
    for(long cop=i-1;v[cop]!=n-1;cop--)
        if(l[cop]==n-1)
        {
            afis(n-1,cop);
            break;
        }
    fprintf(f2,"%ld ",c[i]);
}
int main()
{
    f1=fopen("scmax.in","r");
    f2=fopen("scmax.out","w");
    fscanf(f1,"%ld",&n);
    for(i=0,q=1;i<n;i++)
    {
        fscanf(f1,"%ld",&c[i]);
        x=c[i];
        li=1;ls=q-1;gasit=0;
        while(li<=ls && !gasit)
        {
            m=(li+ls)/2;
            if(x==v[m])
            {
                v[m]=x;
                l[i]=m;
                gasit=1;
            }
            else if(x<v[m])
                ls=m-1;
            else
                li=m+1;
        }
        if(!gasit)
        {
            l[i]=m;
            v[m]=x;
            if(m==q-1)
                q++;
        }
    }
    long max=0,pmax;
    for(i=1;i<=n;i++)
        if(l[i]>max)
        {
            max=l[i];
            pmax=i;
        }
    fprintf(f2,"%ld\n",max);
    afis(max,pmax);
    return 0;
}