Cod sursa(job #216264)

Utilizator GavrilaVladGavrila Vlad GavrilaVlad Data 23 octombrie 2008 18:40:22
Problema Subsir crescator maximal Scor 55
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <stdio.h>

long v[100000], st[100000], poz[100000], p[100000], n, i, j, k, c1, c2, c3;

int main()
{
    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);
    scanf("%d", &n);
    k=0;
    for(i=1; i<=n; i++)
    {
        scanf("%d", &v[i]);
        if(st[k]<v[i])
        {
            k++;
            st[k]=v[i];
            p[i]=poz[k-1];
            poz[k]=i;
        }
        else
        {
            c1=1;
            c2=k;
            while(c2>c1)
            {
            //    printf("%d %d\n", c1, c2);
                c3=(c1+c2)/2;
                if(v[i]<st[c3]) 
                    c2=c3;
                else
                    c1=c3+1;
            }
            st[c1]=v[i];
            p[i]=poz[c1-1];
            poz[c1]=i;
      //      printf("%d %d\n", c1, c2);
        }
     //   for(j=1; j<=k; j++)
    //    printf("%d ", st[j]);
     //   printf("\n"); 
    }
    for(i=k; i>1; i--)
    {
        st[i]=v[poz[i]];
        poz[i]=p[i];
    }
    printf("%d\n", k);
    for(i=1; i<=k; i++)
    printf("%d ", st[i]);
    printf("\n");
    return 0;
}