Pagini recente » Cod sursa (job #1893588) | Cod sursa (job #399019) | Cod sursa (job #2603129) | Cod sursa (job #223900) | Cod sursa (job #3166868)
#include <fstream>
#define DIM 100001
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n, v[DIM];
int L[DIM];
int previous[DIM];
int maxLength;
int search(int x) {
int poz = 0;
int st = 1;
int dr = maxLength;
while (st <= dr) {
int mid = (st + dr) / 2;
if (v[L[mid]] < x) {
poz = mid;
st = mid + 1;
}
else {
dr = mid - 1;
}
}
return poz;
}
void printRecursive(int index) {
if (index != 0) {
printRecursive(previous[index]);
}
else return;
fout << v[index] << " ";
}
int main()
{
fin >> n;
for (int i = 1; i <= n; i++) {
fin >> v[i];
}
L[1] = 1;
previous[1] = 0;
maxLength = 1;
for (int i = 2; i <= n; i++) {
int poz = search(v[i]);
poz++;
L[poz] = i;
maxLength = max(poz, maxLength);
previous[i] = L[poz - 1];
}
fout << maxLength << "\n";
printRecursive(L[maxLength]);
}