Cod sursa(job #228305)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 6 decembrie 2008 22:09:05
Problema Subsir crescator maximal Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 1.15 kb
#include <stdio.h>   
  
#define NMAX 100000
  
int n,max;   
int a[NMAX],prec[NMAX],d[NMAX],poz[NMAX];   
  
int binary_search(int x)     
{     
    int ls=1,ld=max,mij;   
       
    while (ls<=ld)   
    {   
          mij=ls+(ld-ls)/2;   
          if (mij==0) 
               mij=1;   
          
          if (d[mij-1]<x && x<=d[mij]) return mij;   
          else
          if (d[mij]<x) 
           ls=mij+1;   
          else 
          if (x<=d[mij-1]) 
           ld=mij-1;   
    }     
    return max+1;   
}     
  
int main()   
{   
    int i,q,x;   
    freopen("scmax.in", "r", stdin);   
    freopen("scmax.out", "w", stdout);   
       
    scanf("%d", &n);   
    for (i=1;i<=n; ++i)   
    {   
        scanf("%d", a[i]);   
        q=binary_search(a[i]);   
        if (q>max) 
         ++max;   
        d[q]=a[i];   
        poz[q]=i;     
        prec[i]=poz[q-1];   
    }   
    printf("%d\n", max);   
       
    x=poz[max];   
    for (i=max;i>0;--i)   
    {   
        d[i]=a[x];   
        x=prec[x];   
    }   
       
    for (i=1;i<=max;++i) 
         printf("%d ", d[i]);   
}