Cod sursa(job #303678)

Utilizator tibiletsKoos Tiberiu Iosif tibilets Data 10 aprilie 2009 10:15:49
Problema Subsir crescator maximal Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.66 kb
#include<fstream.h>
int P[100001],M[100001],L,a[100001],i=1,j,N,s[100001];
inline int max(int x,int y)
{return x>y?x:y;}
int caut(int i)
{int s=0,d=L,m=L/2;
 while(s<=d)
 {if(a[M[m]]<a[i]&&a[M[m+1]]>=a[i]) return m;
  if(a[M[j]]<a[i])d=m-1;
  else   		  s=m+1;
  m=(s+d)/2;
 }
 return L;//return 0 conform wiki
}
int main()
{ifstream f("scmax.in");
ofstream g("scmax.out");
f>>N;
for(;i<=N;++i)
	f>>a[i];
for(i=1;i<=N;++i)
{j=caut(i);
 P[i]=M[j];//un if in wiki dupa acest rand ce include ultimele 2 instructiuni
 M[j+1]=i;
 L=max(L,j+1);
}
g<<L<<'\n';
for(i=L,j=M[L];i;--i)
{s[i]=a[j];
 j=P[j];}
for(i=1;i<=L;++i)
 g<<s[i]<<' ';
return 0;
}