Cod sursa(job #1418981)

Utilizator demetriad-dagpagDavid Demetriad demetriad-dagpag Data 14 aprilie 2015 15:13:07
Problema Subsir crescator maximal Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.74 kb
#include <stdio.h>
#include <stdlib.h>
int s[100001],v[100001],p[100001],n,nr;
void afis(int i)
{
    if(p[i])
        afis(p[i]);
    printf("%d ",v[i]);
}
int cautbin(int x)
{
    int i=0,pas=1<<16;
    for(pas*=2; pas; pas>>=1)
        if(i+pas<=nr && v[s[i+pas]]<x)
            i+=pas;
    return i;
}
int main()
{
    int i,poz,z;
    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);
    scanf("%d",&n);
    for(i=1; i<=n; i++)
        scanf("%d",&v[i]);
    for(i=1; i<=n; i++)
    {
        poz=cautbin(v[i]);
        p[i]=s[poz];
        s[poz+1]=i;
        if(nr<poz+1)
        {
            nr=poz+1;
            z=i;
        }
    }
    printf("%d\n",nr);
    afis(z);

    return 0;
}