Cod sursa(job #1886006)

Utilizator Marius7122FMI Ciltea Marian Marius7122 Data 20 februarie 2017 16:29:59
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <stdio.h>
#define N 100005

int n,i,m;
int v[N],l[N],pos[N],sol[N];

void bs(int x, int i)
{
    if(x>l[m])
    {
        l[++m]=x;
        pos[i]=m;
    }
    else
    {
        int step=1<<17,s=0;
        while(step)
        {
            if(s+step<=m && l[s+step]<x)
                s+=step;
            step/=2;
        }
        l[s+1]=x;
        pos[i]=s+1;
    }

}

int main()
{
    FILE *f1,*f2;
    f1=fopen("scmax.in","r");
    f2=fopen("scmax.out","w");

    fscanf(f1,"%d",&n);
    for(i=1;i<=n;i++)
    {
        fscanf(f1,"%d",&v[i]);
        bs(v[i],i);
    }


    fprintf(f2,"%d\n",m);

    i=n;
    while(m)
    {
        if(pos[i]==m)
        {
            m--;
            sol[++sol[0]]=v[i];
        }
        i--;
    }

    for(i=sol[0];i;i--)
        fprintf(f2,"%d ",sol[i]);

    return 0;
}