Pagini recente » Borderou de evaluare (job #3116181) | Cod sursa (job #3357474) | Monitorul de evaluare | Cod sursa (job #1104529) | Cod sursa (job #3314489)
//#pragma GCC optimize("O3, Ofast, unroll-loops")
#include <bits/stdc++.h>
using namespace std;
int v[300005], dp[300005], v2[300005], v3[300005];
int main()
{
ifstream cin("scmax.in");
ofstream cout("scmax.out");
int n, rez=1, poz=1, cnt=1;
cin>>n;
for(int i=1; i<=n; i++)
{
cin>>v[i];
}
dp[1]=1;
for(int i=2; i<=n; i++)
{
int ok=0;
for(int j=1; j<=cnt; j++)
{
if(v[i]<=v[dp[j]])
{
dp[j]=i;
v2[i]=dp[j-1];
ok=1;
break;
}
}
if(ok==0)
{
dp[++cnt]=i;
v2[i]=dp[cnt-1];
}
}
cout<<cnt<<'\n';
poz=dp[cnt];
v3[rez++]=v[poz];
while(v2[poz]>0)
{
poz=v2[poz];
v3[rez++]=v[poz];
}
for(int i=rez-1; i>0; i--)
cout<<v3[i]<<" ";
return 0;
}