Pagini recente » Cod sursa (job #620157) | Cod sursa (job #1502087) | Cod sursa (job #73123) | Cod sursa (job #324080) | Cod sursa (job #1811015)
#include <bits/stdc++.h>
# define maxn 100005
# define ll long long
# define clock (clock() * 1000.0 / CLOCKS_PER_SEC)
# define rc(s) return cout << s,0
# define _ ios_base::sync_with_stdio(false);cin.tie(0);
# define pb push_back
# define mp make_pair
using namespace std;
vector<int>vec;
int n,a[100005],pre[100005];
pair <int,int> dp[100005],mx;
void constr(int pos,int k)
{
if(k > dp[n].first) return;
vec.push_back(a[pos]);
constr(dp[pos].second,k+1);
}
int main(){_
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
cin >> n;
for(int i = 1;i<=n;i++)
cin >> a[i];
for(int i = 1;i<=n;i++)
{
dp[i]={1,i};
for(int j = i;j>=1;j--)
{
if(a[j] < a[i] && dp[j].first + 1 > dp[i].first)
dp[i] = {dp[j].first+1,j};
}
if(dp[i].first > mx.first) mx = dp[i];
}
cout << mx.first << '\n';
constr(n,1);
for(int i = vec.size()-1;i>=0;i--)
cout << vec[i] << ' ';
}