Cod sursa(job #1264359)

Utilizator claudiu.gatinaFMI Claudiu Gatina claudiu.gatina Data 15 noiembrie 2014 19:06:55
Problema Subsir crescator maximal Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <stdio.h>

long int a[100000],b[100000],c[100000];
int n,k,m;

int cautare(int x)
{
    if(!m)
    {
        m++;
        return 0;
    }
    if(a[x]>a[b[m-1]])
    {
        m++;
        return m-1;
    }
    int i,step;
    for(step=1;step<m;step<<=1);
    for(i=m-1;step;step>>=1)
        if(i-step>=0 && a[b[i-step]]>a[x])
            i-=step;
    return i;
}

void afisare(int q, int w)
{
    if(q+1)
    {
        afisare(q-1,c[w]);
        printf("%d ", a[w]);
    }
}

int main()
{
    int i;
    freopen("scmax.in", "r", stdin);
    freopen("scmax.out", "w", stdout);
    scanf("%d", &n);
    for(i=0;i<n;i++)
    {
        scanf("%d", &a[i]);
        k=cautare(i);

        b[k]=i;
        c[i]=b[k-1];
    }
    printf("%d\n", m);
  /*  for(i=0;i<m;i++)
    {
        printf("%d ", a[n]);
        n=c[n];
    }*/
    afisare(m-1,b[m-1]);
    return 0;
}