Pagini recente » Cod sursa (job #283371) | Cod sursa (job #270966) | Cod sursa (job #2738246) | Cod sursa (job #1295136) | Cod sursa (job #383809)
Cod sursa(job #383809)
#include<stdio.h>
const int N=100005;
int n,v[N],a[N],pred[N],max,r[N],pz,baz;
void read()
{
scanf("%d",&n);
for( int i=1 ; i<=n ; ++i )
scanf("%d",&a[i]);
}
void cb( int &N,int val )
{
int i,step;
for(step=1; step < N ; step<<=1 );
for( i=0 ; step ; step>>=1 )
if( i+step<=N && a[v[i+step]] < a[val])
i+=step;
++i;
if(i > N)
++N;
v[i] = val;
pred[val] = v[i-1];
}
void sir(int poz)
{
if(pred[poz])
sir(pred[poz]);
printf("%d ",a[poz]);
}
void solve()
{
max=1;
v[1] = 1;
for( int i=2 ; i<=n ; ++i )
cb(max,i);
int i=max;
printf("%d\n",max);
sir(v[max]);
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
read();
solve();
return 0;
}