Cod sursa(job #579930)

Utilizator drywaterLazar Vlad drywater Data 12 aprilie 2011 16:32:46
Problema Subsir crescator maximal Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <stdio.h>
FILE *f=fopen("scmax.in","r"),*g=fopen("scmax.out","w");
int n,v[100001],l[100001],bst[100001],pr[100001],i,pos,s,nr=1,max=1,k;
int main(void)
{
    fscanf(f,"%d",&n);
    for (i=1;i<=n;i++)
        fscanf(f,"%d",&v[i]);
    bst[1]=1;
    l[1]=1;
    pr[1]=0;
    for (i=2;i<=n;i++)
    {
        k=1;
        s=0;
        while (k<=nr) k*=2;
        k/=2;
        while (k>=1)
        {
            if (s+k<=nr && v[l[s+k]]<v[i]) {pos=s+k; s+=k;}
            k/=2;
        }
        bst[i]=bst[l[pos]]+1;
        pr[i]=l[pos];
        l[pos+1]=i;
        if (nr==pos) nr++;
        if (bst[i]>bst[max]) max=i;
    }
    fprintf(g,"%d\n",bst[max]);
    i=max;
    while (i)
    {
        l[++l[0]]=i;
        i=pr[i];
    }
    for (i=l[0];i>=1;i--)
        fprintf(g,"%d ",v[l[i]]);

}