Pagini recente » Cod sursa (job #1974139) | Cod sursa (job #2329572) | Cod sursa (job #646303) | Cod sursa (job #3231286) | Cod sursa (job #410996)
Cod sursa(job #410996)
#include<fstream.h>
#include<iostream.h>
int a[100100],b[100100],pre[100100],s[100100];
int main()
{
int i,n,L,st,dr,gasit,m;
ifstream f("scmax.in");
ofstream g("scmax.out");
f>>n;
for(i=1;i<=n;i++)
f>>a[i];
b[1]=1;
L=1;
for(i=2;i<=n;i++)
{
st=0;
dr=L;
gasit=0;
while(st<=dr&&!gasit)
{
m=(st+dr)>>1;
if(a[b[m]]<a[i]&&(m==L||a[i]<a[b[m+1]]))
gasit=1;
else
if(a[b[m]]<a[i])
st=m+1;
else
dr=m-1;
}
if(gasit)
{
b[m+1]=i;
pre[i]=b[m];
if(m==L)
L++;
}
}
i=b[L];
while(i)
{
s[++s[0]]=a[i];
i=pre[i];
}
g<<L<<'\n';
for(i=s[0];i;i--)
g<<s[i]<<' ';
return 0;
}