Pagini recente » Cod sursa (job #539913) | Cod sursa (job #2298576) | Cod sursa (job #38497) | Cod sursa (job #1869453) | Cod sursa (job #2963561)
#include <bits/stdc++.h>
using namespace std;
ifstream in ("scmax.in");
ofstream out ("scmax.out");
int a[100001];
int dp[100001];
int main()
{
int n;
in >> n;
for (int i=1; i<=n; i++)
in >> a[i], dp[i] = 1;
int ans = 0;
for (int i=1; i<=n; i++)
{
int j = upper_bound(a+1, a+n+1, a[i]) - (a + 1);
j++;
dp[j] = max(dp[j], dp[i]+1);
}
for (int i=1; i<=n; i++)
ans = max(ans, dp[i]);
out << ans << '\n';
vector<int>res;
int len = ans;
int val = 2e9+1;
for (int i=n; i>0; i--)
{
if (a[i] < val && dp[i] == len)
{
res.push_back(a[i]);
val = a[i];
len--;
}
}
reverse(res.begin(), res.end());
for (int x : res)
out << x << ' ';
return 0;
}