Pagini recente » Cod sursa (job #612831) | Cod sursa (job #2239022) | Cod sursa (job #1038478) | Cod sursa (job #311313) | Cod sursa (job #2280033)
#include <cstdio>
using namespace std;
int sir[100004];
int cop[100004];
int poz[100004];
int n;
int u=1;
void citire()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%ld",&sir[i]);
}
int cbinara(int x)
{
int m;
int st=1,dr=u;
while(st<=dr)
{
m=(st+dr)/2;
if(x>cop[m])
st=m+1;
else if(x<=cop[m])
dr=m-1;
}
return st;
}
void prelucrare()
{
cop[1]=sir[1];
poz[1]=1;
int x;
for(int i=2;i<=n;i++)
{
x=cbinara(sir[i]);
cop[x]=sir[i];
poz[i]=x;
if(x>u)
{
u=x;
}
}
printf("%d\n",u);
x=u;
for(int i=n;i>=1;i--)
{
while(poz[i]!=u)
i--;
cop[u]=sir[i];
u--;
}
for(int i=1;i<=x;i++)
printf("%d ",cop[i]);
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
citire();
prelucrare();
return 0;
}