Pagini recente » Cod sursa (job #1765342) | Cod sursa (job #1031601) | Cod sursa (job #881519) | Cod sursa (job #1942721) | Cod sursa (job #1667035)
#include <iostream>
#include <fstream>
using namespace std;
int sir[100001], u[100001], pred[100001], poz;
ofstream file_out ("scmax.out");
int cautBin (int nr) {
int i = 0, pas = 1 << 16;
while (pas) {
if (pas + i <= poz && sir[u[i + pas]] < nr) {
i += pas;
}
pas /= 2;
}
return i;
}
void afisare(int i) {
if (i == 0) {
return;
}
afisare(i - 1);
file_out << sir[u[i]] << " ";
}
int main() {
ifstream file_in ("scmax.in");
int n, loc;
int i;
// Citirea datelor
file_in >> n;
file_in >> sir[1];
// Calcularea solutiei
poz = 0;
u[++poz] = 1;
pred[1] = 0;
for (i = 2; i <= n; i++) {
file_in >> sir[i];
loc = cautBin(sir[i]);
if (loc == poz) {
++poz;
}
u[loc + 1] = i;
pred[i] = u[loc];
}
// Afisarea solutiei
if (n == 1) {
file_out << 1 << "\n" << sir[1];
return 0;
}
file_out << poz << "\n";
afisare(poz);
return 0;
}