Pagini recente » Cod sursa (job #722438) | Cod sursa (job #809019) | Cod sursa (job #1859739) | Cod sursa (job #901877) | Cod sursa (job #1414467)
#include <cstdio>
#include <algorithm>
#define Nmax 100005
using namespace std;
int dp[Nmax],prv[Nmax],v[Nmax],a[Nmax],n;
inline void Reconst(int p)
{
if(!prv[p])
{
printf("%d", a[p]);
return;
}
Reconst(prv[p]);
printf(" %d", a[p]);
}
inline bool Cmp(int x, int y)
{
return a[x]<a[y];
}
int main()
{
int i,len,poz;
freopen ("scmax.in","r",stdin);
freopen ("scmax.out","w",stdout);
scanf("%d", &n);
for(i=1;i<=n;++i) scanf("%d", &a[i]);
dp[1]=1; v[1]=1; len=1;
for(i=2;i<=n;++i)
{
poz=lower_bound(v+1,v+len+1,i,Cmp)-v-1;
if(poz>=1 && poz<=len)
{
prv[i]=v[poz]; dp[i]=poz+1; v[dp[i]]=i; len=max(len,poz+1);
}
else
{
dp[i]=1; v[1]=i;
}
}
printf("%d\n", len);
Reconst(v[len]);
printf("\n");
return 0;
}