Pagini recente » Cod sursa (job #1227501) | Cod sursa (job #360745) | Cod sursa (job #2399758) | Cod sursa (job #2457770) | Cod sursa (job #609215)
Cod sursa(job #609215)
#include <cstdio>
#include <iostream>
#include <vector>
using namespace std;
int v[100013],dp[100013],urm[100013],poz;
vector<int> dp2;
int main()
{
int i,n,j;
freopen("scmax.in","r", stdin);
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&v[i]);
for(i=n;i>=1;i--)
{
for(j=dp2.size()-1;j>=0;j--)
{
if(v[dp2[j]]>v[i])
{
dp[i]=j+2;
urm[i]=dp2[j];
if(dp[i]>dp2.size()) dp2.push_back(i);
else if(v[dp2[dp[i]-1]]<v[i]) dp2[dp[i]-1]=i;
break;
}
}
if(dp[i]==0)
{
dp[i]=1;
urm[i]=0;
if(dp2.size()==0) dp2.push_back(i);
else if(v[dp2[0]]<v[i]) dp2[0]=i;
}
if(dp[i]>dp[poz]) poz=i;
}
freopen("scmax.out","w", stdout);
cout<<dp[poz]<<"\n";
for(i=poz;i!=0;i=urm[i])
{
cout<<v[i]<<" ";
}
fclose(stdin);
fclose(stdout);
return 0;
}