Pagini recente » Cod sursa (job #1171434) | Cod sursa (job #2675048) | Runda 2 preONI 2007 | Cod sursa (job #1349129) | Cod sursa (job #1082051)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
#define MAX 100010
int a[MAX], L[MAX], best[MAX], nr, n, i, poz, p[MAX];
void af(int el)
{
if(p[el]>0)
af(p[el]);
fout<<a[el]<<" ";
}
int cauta(int el)
{
int inc, sf, mid;
inc=0;
sf=nr;
while(inc<=sf)
{
mid=(inc+sf)>>1;
if(a[L[mid]]<el && a[L[mid+1]]>=el)
{
return mid;
}
if(a[L[mid]]>=el)
{
sf=mid-1;
}
else
{
inc=mid+1;
}
}
return nr;
}
int main()
{
fin>>n;
for(i=1;i<=n;i++)
{
fin>>a[i];
}
L[0]=0;
L[1]=1;
best[1]=1;
nr=1;
for(i=2;i<=n;i++)
{
poz=cauta(a[i]);
p[i]=L[poz];
best[i]=poz+1;
L[poz+1]=i;
if(poz+1>nr)
nr=poz+1;
}
fout<<nr<<"\n";
af(L[nr]);
}