Pagini recente » Cod sursa (job #139701) | Cod sursa (job #1026113) | Cod sursa (job #1465975) | Calibrare limite de timp | Cod sursa (job #1252435)
#include <fstream>
#define oo 2000000010
#define N 100010
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n,a[N],I[N],V[N],B[N],lo,hi,mi,i,lmax;
void afiseaza(int);
int main()
{
fin>>n;
for(i=1;i<=n;i++)
{
fin>>a[i];
V[i]=oo;
}
for(i=1;i<=n;i++)
{
lo=0;hi=lmax+1;
while(hi-lo>1)
{
mi=(lo+hi)/2;
if(V[mi]<a[i])lo=mi;
else hi=mi;
}
B[i]=I[lo];
if(V[hi]==oo)lmax++;
if(a[i]<V[hi])
{
V[hi]=a[i];I[hi]=i;
}
}
fout<<lmax<<'\n';
afiseaza(I[lmax]);
return 0;
}
void afiseaza(int poz)
{
if(!poz)return;
afiseaza(B[poz]);
fout<<a[poz]<<' ';
}