Pagini recente » Cod sursa (job #2529668) | Cod sursa (job #2524569) | Cod sursa (job #1965288) | Cod sursa (job #2420253) | Cod sursa (job #2209054)
#include <iostream>
#include <fstream>
#define dMAX 100000
using namespace std;
int n, arr[dMAX + 2];
int parent[dMAX + 2];
int LIS[dMAX + 2], idx;
int finalLIS[dMAX + 2];
int l, r, middle, pos, k;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int main()
{
int i, j;
fin >> n;
for (i = 1; i <= n; i++) fin >> arr[i];
for (i = 1; i <= n; i++) {
l = 1, r = idx;
while (l <= r) {
middle = (l + r) / 2;
if (arr[LIS[middle]] < arr[i]) l = middle + 1;
else r = middle - 1;
}
pos = l;
parent[i] = LIS[pos - 1];
LIS[pos] = i;
idx = max(idx, pos);
}
k = LIS[idx];
for (i = idx; i >= 1; i--) {
finalLIS[i] = arr[k];
k = parent[k];
}
fout << idx << '\n';
for (i = 1; i <= idx; i++) fout << finalLIS[i] << ' ';
return 0;
}