Pagini recente » Cod sursa (job #727189) | Cod sursa (job #953819) | Cod sursa (job #1811099) | Cod sursa (job #1997203) | Cod sursa (job #690808)
Cod sursa(job #690808)
#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;
int v[100005],minim[100005],dp[100005];
vector<pair<int,int> > v2;
int main()
{
int n,maxim=0,ind=0;
freopen("scmax.in","r", stdin);
freopen("scmax.out","w", stdout);
scanf("%d",&n);
scanf("%d",&v[1]);
minim[0]=-1<<30;
dp[1]=1;
minim[1]=v[1];
int lgmax=1;
for(int i=2;i<=n;i++)
{
scanf("%d",&v[i]);
for(int j=lgmax;j>=0;j--)
if(minim[j]<v[i])
{
dp[i]=j+1;
break;
}
if(dp[i]>lgmax)
{
lgmax++;
minim[lgmax]=v[i];
}
else
{
minim[dp[i]]=min(minim[dp[i]],v[i]);
}
if(dp[i]>maxim)
{
ind=i;
maxim=dp[i];
}
}
printf("%d\n",maxim);
v2.push_back(make_pair(v[ind],ind));
for(int i=ind-1;i>=1;i--)
{
if(dp[v2.back().second]==dp[i]+1)
v2.push_back(make_pair(v[i],i));
}
for(int i=v2.size()-1;i>=0;i--)
printf("%d ",v2[i].first);
return 0;
}