Pagini recente » Cod sursa (job #2305357) | Cod sursa (job #1850402) | Cod sursa (job #2531505) | Borderou de evaluare (job #366915) | Cod sursa (job #560248)
Cod sursa(job #560248)
#include<cstdio>
#define NM 100001
int N,v[NM],p[NM],l[NM],poz,maxx,pmax,nr;
inline void citire()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&N);
for (int i=1; i<=N; ++i)
scanf("%d",&v[i]);
}
inline int caut(int x)
{
int p=1,u=nr,m,pok=nr;
while (p<=u)
{
m=(p+u)>>1;
if (v[l[m]]<x)
p=m+1;
else
{
u=m-1;
pok=m;
}
}
return pok;
}
inline void afis(int i)
{
if (p[i])
afis(p[i]);
printf("%d ",v[i]);
}
inline int maxim(int a, int b)
{
if (a>b) return a;
return b;
}
inline void scmax()
{
l[1]=1;
nr=1;
for (int i=2; i<=N; ++i)
{
if (v[i]>v[l[nr]])
poz=nr+1;
else
poz=caut(v[i]);
p[i]=l[poz-1];
l[poz]=i;
nr=maxim(nr,poz);
if (nr>maxx)
{
maxx=nr;
pmax=i;
}
}
printf("%d\n",maxx);
afis(pmax);
}
int main()
{
citire();
scmax();
return 0;
}