Pagini recente » Cod sursa (job #618806) | Cod sursa (job #1922996) | Cod sursa (job #3244100) | Cod sursa (job #643628) | Cod sursa (job #379659)
Cod sursa(job #379659)
#include<fstream.h>
int st,dr,i,j,mij,m[101000],a[101000],b[101000],p[101000],n,L,gasit,u;
int main()
{
ifstream f("scmax.in");
ofstream g("scmax.out");
f>>n;
for(i=1;i<=n;i++)
f>>a[i];
u=(1<<30);
a[0]=-u;
m[1]=1;
for(i=2;i<=n;i++)
{
st=0;
dr=L;
gasit=0;
j=0;
while(st<=dr&&!gasit)
{
mij=(st+dr)>>1;
if(a[m[mij]]<a[i]&&(a[i]<=a[m[mij+1]]||mij==L))
{
gasit=1;
j=mij;
}
else
if(a[m[mij+1]]<a[i])
st=mij+1;
else
dr=mij-1;
}
if(gasit)
{
m[j+1]=i;
p[i]=m[j];
if(j+1>L)
L=j+1;
}
}
i=m[L];
j=0;
while(i)
{
b[++j]=a[i];
i=p[i];
}
g<<L<<'\n';
for(i=j;i;i--)
g<<b[i]<<' ';
return 0;
}