Pagini recente » Cod sursa (job #2757680) | Cod sursa (job #410589) | Cod sursa (job #2710099) | Cod sursa (job #1963118) | Cod sursa (job #2709011)
#include <fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n, a[100005], v[100005], p[100005], lg = 1;
void citire() {
f >> n;
for (int i = 0; i < n; ++i)
f >> a[i];
}
int cautare_binara(int x) {
int st = 1, dr = lg, mij;
while (st <= dr) {
mij = (st + dr) / 2;
if (v[mij] < x)
st = mij + 1;
else
dr = mij - 1;
}
return st;
}
void parcurgere() {
p[1] = 1;
v[1] = a[0];
for (int i = 1; i < n; ++i) {
p[i] = cautare_binara(a[i]);
v[p[i]] = a[i];
lg = max(lg, p[i]);
}
}
void afisare(int poz, int nr) {
if (!nr)
return;
for (;; poz--)
if (p[poz] == nr) {
afisare(poz - 1, nr - 1);
g << a[poz] << ' ';
return;
}
}
int main() {
citire();
parcurgere();
g << lg << '\n';
afisare(n - 1, lg);
return 0;
}