Pagini recente » Cod sursa (job #396942) | Cod sursa (job #207200) | Cod sursa (job #403571) | Cod sursa (job #1474751) | Cod sursa (job #3174474)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n, arr[100005];
int l[100005], len = 1;
int pos[100005];
int binarySearch(int low, int high, int key) {
while (low <= high) {
int mid = (low + high) / 2;
if (l[mid] < key)
low = mid + 1;
else
high = mid - 1;
}
return low;
}
void print(int index, int last) {
if (index == 0)
return;
if (pos[index] == last) {
print(index - 1, last - 1);
fout << arr[index] << " ";
} else {
print(index - 1, last);
}
}
void los() {
l[1] = arr[1];
pos[1] = 1;
for (int i = 1; i <= n; i++) {
int val = binarySearch(1, len, arr[i]);
l[val] = arr[i];
pos[i] = val;
len = max(len, val);
}
fout << len << "\n";
print(n, len);
}
int main() {
fin >> n;
for (int i = 1; i <= n; i++)
fin >> arr[i];
los();
}