Pagini recente » Cod sursa (job #3040206) | Cod sursa (job #2275085) | Cod sursa (job #1588170) | Cod sursa (job #1226285) | Cod sursa (job #2239039)
#include <iostream>
#include <fstream>
#define dMAX 100000
using namespace std;
int n, arr[dMAX + 2], father[dMAX + 2], LIS[dMAX + 2], len;
int l, r, m, newPos;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
void Afis(int idx) {
if (father[idx]) {
Afis(father[idx]);
fout << arr[idx] << ' ';
} else {
fout << arr[idx] << ' ';
}
}
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 = len;
while (l <= r) {
m = (l + r) / 2;
if (arr [ LIS[m] ] < arr[i]) {
l = m + 1;
} else r = m - 1;
}
newPos = l;
father[i] = LIS[newPos - 1];
LIS[newPos] = i;
len = max(len, newPos);
}
fout << len << "\n";
Afis(LIS[len]);
return 0;
}