Pagini recente » Monitorul de evaluare | Cod sursa (job #2002159) | Cod sursa (job #2169084) | Cod sursa (job #228039) | Cod sursa (job #2963564)
#include <bits/stdc++.h>
using namespace std;
ifstream in ("scmax.in");
ofstream out ("scmax.out");
int dp[100001];
int main()
{
int n;
in >> n;
for (int i=0; i<n; i++)
dp[i] = 1;
vector<int>v(n);
for (int &x : v)
in >> x;
for (int i=0; i<n; i++)
{
int pos = upper_bound(v.begin(), v.end(), v[i]) - v.begin();
dp[pos] = max(dp[pos], dp[i] + 1);
}
int ans = 0;
for (int i=0; i<n; i++)
ans = max(ans, dp[i]);
out << ans << '\n';
int len = ans, val = 2e9+1;
for (int i=n; i>0; i--)
{
if (v[i] < val && dp[i] == len)
{
out << v[i] << ' ';
val = v[i], len--;
}
}
return 0;
}