Pagini recente » Cod sursa (job #2344275) | Cod sursa (job #1729812) | Cod sursa (job #1874878) | Cod sursa (job #2889682) | Cod sursa (job #2575683)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int MAXN = 100005;
int dp[MAXN], fat[MAXN], inp[MAXN], k, n;
bool compare(const int &x, const int &y)
{
return inp[x] < inp[y];
}
void print(int ind)
{
if (ind == 0)
return;
print(fat[ind]);
fout << inp[ind] << ' ';
}
int main()
{
fin >> n;
for (int i = 1; i <= n; ++i) {
fin >> inp[i];
if (inp[i] > inp[dp[k]]) {
dp[++k] = i;
fat[i] = dp[k - 1];
}
else {
int ind = lower_bound(dp + 1, dp + k + 1, inp[i], compare) - (dp + 1);
dp[ind + 1] = i;
fat[i] = dp[ind];
}
}
fout << k << '\n';
print(dp[k]);
return 0;
}