Pagini recente » Cod sursa (job #826893) | Cod sursa (job #428703) | Cod sursa (job #2121249) | Cod sursa (job #93102) | Cod sursa (job #410103)
Cod sursa(job #410103)
#include <algorithm>
using namespace std;
#define DIM 100005
int b[DIM],a[DIM],n,poz,t[DIM],sol;
char buff[DIM];
inline void pars (int &nr)
{
nr=0;
while(buff[poz]<'0' || '9'<buff[poz])
if(++poz==DIM)
{
fread (buff,1,DIM,stdin);
poz=0;
}
while('0'<=buff[poz] && buff[poz]<='9')
{
nr=nr*10+buff[poz]-'0';
if(++poz==DIM)
{
fread (buff,1,DIM,stdin);
poz=0;
}
}
}
void read ()
{
int i;
pars (n);
for (i=1;i<=n;++i)
pars(a[i]);
}
int cbin (int x)
{
int st=1,dr=sol,mij,rez=0;
while(st<=dr)
{
mij=(st+dr)/2;
if(a[b[mij]]<x)
rez=mij,st=mij+1;
else
dr=mij-1;
}
return rez;
}
void show (int x)
{
if(t[x])
show (t[x]);
printf("%d ",a[x]);
}
void solve ()
{
int i;
b[1]=1;
sol=1;
for(i=2;i<=n;++i)
{
poz=cbin(a[i]);
b[poz+1]=i;
t[i]=b[poz];
if(poz+1>sol)
++sol;
}
printf("%d\n",sol);
show (b[sol]);
}
int main ()
{
freopen ("scmax.in","r",stdin);
freopen ("scmax.out","w",stdout);
read ();
solve ();
return 0;
}