Pagini recente » Cod sursa (job #676510) | Cod sursa (job #826465) | Cod sursa (job #2625199) | Cod sursa (job #371985) | Cod sursa (job #2396833)
#include <fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n, a[100001], dp[100001], poz[100001], maxi, pozmax[100001];
int main()
{
f >> n;
for (int i = 1; i <= n; ++i) f >> a[i];
dp[1] = poz[1] = pozmax[1] = 1;
for (int i = 2; i <= n; ++i) {
dp[i] = 1;
poz[i] = poz[i - 1];
pozmax[i] = pozmax[i - 1];
for (int j = 1; j < i; ++j) if (a[j] < a[i] && dp[j] + 1 > dp[i]) {
dp[i] = dp[j] + 1;
poz[i] = j;
pozmax[i] = i;
}
maxi = max(maxi, dp[i]);
}
g << maxi << '\n';
int i = n, k = 0;
while (poz[i] != pozmax[i]) {
dp[++k] = a[pozmax[i]];
i = poz[i];
}
g << a[i] << ' ';
for (int i = k; i; --i) g << dp[i] << ' ';
return 0;
}