Pagini recente » Cod sursa (job #1804530) | Istoria paginii runda/simulare_baraj_2010 | Statistici Dabu Alexandru (AlexDabu) | Cod sursa (job #2132648) | Cod sursa (job #1234302)
#include <cstdio>
using namespace std;
int v[100010],sol[100010],t[100010],n,i,nr,poz;
int cautbin(int x)
{
int st=1,dr=nr,mid;
while(st<=dr)
{
mid=(st+dr)/2;
if(x<=v[sol[mid]]) dr=mid-1;
else st=mid+1;
}
return st;
}
void write(int x)
{
if(t[x]) write(t[x]);
printf("%d ",v[x]);
}
int main()
{
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
scanf("%d",&n);
for(i=1;i<=n;i++) scanf("%d",&v[i]);
sol[1]=nr=1;
for(i=2;i<=n;i++)
{
if(v[i]>v[sol[nr]])
{
sol[++nr]=i;
t[i]=sol[nr-1];
}
else
{
poz=cautbin(v[i]);
sol[poz]=i;
t[i]=sol[poz-1];
}
}
printf("%d\n",nr);
write(sol[nr]);
return 0;
}