Pagini recente » Borderou de evaluare (job #171927) | Borderou de evaluare (job #1891336) | Borderou de evaluare (job #3361161) | Cod sursa (job #3364262) | Cod sursa (job #3364296)
#include <bits/stdc++.h>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
#define cin f
#define cout g
#define int long long
#define inf 1e9
int dp[100005],i,j,k,n,m,a[100005],ultim[100005],p[100005];
signed main()
{
cin>>n;
dp[0]=-inf;
for(i=1;i<=n;i++){
dp[i]=inf;
}
for(i=1;i<=n;i++){
cin>>a[i];
}
for(i=1;i<=n;i++){
int l=upper_bound(dp+1,dp+n+1,a[i])-(dp);
if(dp[l-1]<a[i] && a[i]<dp[l]){
dp[l]=a[i];
p[a[i]]=dp[l-1];
}
}
int element,ct;
for(i=n;i>=1;i--){
if(dp[i]!=inf){
cout<<i;
ct=i;
element=dp[i];
break;
}
}
cout<<"\n";
int aux=element;
vector<int> inv;
for(i=1;i<=ct;i++){
inv.push_back(aux);
//cout<<aux<<" ";
aux=p[aux];
}
for(i=inv.size()-1;i>=0;i--){
cout<<inv[i]<<" ";
}
return 0;
}