Cod sursa(job #286588)

Utilizator petrecgClinciu Glisca Petre petrecg Data 23 martie 2009 22:22:40
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 kb
#include <stdio.h>
long v[100000],a[100000],val[100000],i,poz,x,l,n,sol[100000];
long cauta(long x,long st,long fin)
{long mij;
 mij=(st+fin)/2;
 if(st==fin)return mij;
  else if(v[mij]<x)return cauta(x,mij+1,fin);
	    else return cauta(x,st,mij);
}

int main()
{freopen("scmax.in","r",stdin);freopen("scmax.out","w",stdout);
 scanf("%ld",&n);
 for(i=1;i<=n;i++)
  {scanf("%ld",&a[i]);
   if(i>1) {x=a[i];poz=cauta(x,1,l);
       if(x>v[poz]){l++;v[l]=x;val[i]=l;}
	else {v[poz]=x;val[i]=poz;if(l==0)l++;}
	   }
	   else {l=1;v[l]=a[i];val[i]=1;}
  }
 printf("%ld\n",l);x=l;
 for(i=n;i>=1;i--)if(val[i]==l){sol[l]=a[i];l--;}
 for(i=1;i<=x;i++)printf("%ld ",sol[i]);
 return 0;
}