Pagini recente » Cod sursa (job #1377756) | Cod sursa (job #2214346) | Cod sursa (job #1699498) | Cod sursa (job #592863) | Cod sursa (job #1135776)
#include <cstdio>
#include <algorithm>
#include <memory.h>
#define Nmax 100005
using namespace std;
int v[Nmax],N,pzbest;
int stak[Nmax],L,pz;
int daddy[Nmax],D[Nmax],indi[Nmax];
void read()
{
scanf("%d",&N);
for(int i = 1; i <= N; ++i)scanf("%d",v+i);
}
void dynamic()
{
memset(stak,0x3f3f3f3f,sizeof(stak));
for(int i = 1; i <= N; ++i){
pz = lower_bound(stak+1,stak+L+1,v[i]) - stak;
D[i] = pz;
if(stak[pz] > v[i]) {stak[pz] = v[i];
indi[pz] = i;
}
daddy[i] = indi[pz-1];
if(pz > L) {L++;
pzbest = i;
}
}
printf("%d\n",L);
}
void reconst(int k){
if(daddy[k])
reconst(daddy[k]);
printf("%d ",v[k]);
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
read();
dynamic();
reconst(pzbest);
return 0;
}