Cod sursa(job #1627142)

Utilizator Marius7122FMI Ciltea Marian Marius7122 Data 3 martie 2016 14:47:39
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <stdio.h>
FILE *f1,*f2;
long x,v[100002],i,n,q,li,ls,m,c[100002],rez[100002];
unsigned l[100002],gasit;
int main()
{
    f1=fopen("scmax.in","r");
    f2=fopen("scmax.out","w");
    fscanf(f1,"%ld",&n);
    for(i=1,q=0;i<=n;i++)
    {
        fscanf(f1,"%ld",&c[i]);
        x=c[i];
        li=1;ls=q;gasit=0;
        if(x>v[q])
        {
            v[++q]=x;
            l[i]=q;
        }
        else
            while(li<=ls && !gasit)
            {
                m=(li+ls)/2;
                if(v[m-1]<x && x<=v[m])
                {
                    v[m]=x;
                    l[i]=m;
                    gasit=1;
                }
                else if(x<v[m])
                    ls=m-1;
                else
                    li=m+1;
            }
    }
    long max=0,pmax;
    for(i=1;i<=n;i++)
        if(l[i]>=max)
        {
            max=l[i];
            pmax=i;
        }
    fprintf(f2,"%ld\n",max);
    for(i=pmax,x=max;i>=0 && x>0 ;i--)
        if(l[i]==x)
            rez[x--]=c[i];
    for(i=1;i<=max;i++)
        fprintf(f2,"%ld ",rez[i]);

    return 0;
}