Pagini recente » Cod sursa (job #204329) | Cod sursa (job #2425640) | Cod sursa (job #1337550) | Cod sursa (job #2723614) | Cod sursa (job #2051648)
#include <fstream>
#define NMAX 100005
using namespace std;
int poz[NMAX], L[NMAX], v[NMAX];
int n;
int main()
{
ifstream cin("scmax.in");
ofstream cout("scmax.out");
cin >> n;
for (int i = 1; i <= n; ++i) {
cin >> v[i];
}
poz[1] = 1;
L[1] = v[1];
int lg = 1;
for (int i = 2; i <= n; ++i) {
if (v[i] > L[lg]) {
++lg;
poz[i] = lg;
L[lg] = v[i];
}
else {
//cautam pozitia unde sa-l inseram
int st = 1, dr = lg, lastPoz = lg;
while (st <= dr) {
int mij = (st + dr) / 2;
if (L[mij] >= v[i]) {dr = mij - 1; lastPoz = mij;}
else st = mij + 1;
}
L[lastPoz] = v[i];
poz[i] = lastPoz;
}
}
cout <<lg << "\n";
int j = 0;
for (int i = n; i > 0 && lg > 0; --i) {
if (poz[i] == lg) {
--lg;
L[++j] = v[i];
}
}
for (int i = j; i > 0; --i) {
cout << L[i] << " ";
}
return 0;
}