Pagini recente » Cod sursa (job #3293071) | Cod sursa (job #541729) | Cod sursa (job #2949540) | Cod sursa (job #3150273) | Cod sursa (job #2592779)
#include <bits/stdc++.h>
#define Nmax 100005
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int N, M;
int v[Nmax], dp[Nmax], pos[Nmax], last[Nmax];
void print(int idx) {
if (last[idx] == 0) g << v[idx] << " ";
else print(last[idx]), g << v[idx] << " ";
}
int main()
{
f >> N;
for (int i = 1; i <= N; ++i)
f >> v[i];
for (int i = 1; i <= N; ++i) {
int le = 1, ri = M, P = M + 1;
while (le <= ri) {
int mid = (le + ri) / 2;
if (v[i] <= v[pos[mid]]) P = mid, ri = mid - 1;
else le = mid + 1;
}
if (P > M) ++M;
pos[P] = i;
last[i] = pos[P - 1];
}
g << M << '\n';
print(pos[M]);
return 0;
}