Pagini recente » Cod sursa (job #1692768) | Cod sursa (job #2517554) | Cod sursa (job #361982) | Cod sursa (job #2503731) | Cod sursa (job #1260727)
#include <cstdio>
#include <algorithm>
#define Nmax 100005
using namespace std;
int a[Nmax],dp[Nmax],s[Nmax],p[Nmax],n,t[Nmax];
int main()
{
int i,sol=0,len,poz,psol;
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; s[1]=a[1]; p[1]=1; len=1;
for(i=2;i<=n;++i)
{
if(a[i]>s[len])
{
dp[i]=len+1; t[i]=p[len];
s[++len]=a[i]; p[len]=i;
}
else
{
poz=lower_bound(s+1,s+len+1,a[i])-s-1;
dp[i]=poz+1; t[i]=p[poz];
s[dp[i]]=a[i]; p[dp[i]]=i;
}
if(sol<dp[i])
{
sol=dp[i]; psol=i;
}
}
printf("%d\n", sol);
for(len=0;psol;dp[++len]=a[psol],psol=t[psol]);
reverse(dp+1,dp+len+1);
for(i=1;i<=len;++i) printf("%d ", dp[i]);
printf("\n");
return 0;
}