Pagini recente » Cod sursa (job #2895047) | Cod sursa (job #2549185)
#define MAX_N 100000
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
struct Nod
{
int val;
Nod* t;
};
int n, l, PD[MAX_N + 1];
Nod* P[MAX_N + 1];
void Cb(int x);
void Afisare(Nod* N);
int main()
{
fin >> n;
for (int i = 1, x; i <= n; ++i)
{
fin >> x;
Cb(x);
}
fout << l << '\n';
Afisare(P[l]);
fin.close();
fout.close();
return 0;
}
void Cb(int x)
{
if (PD[l] == x) { return; }
if (PD[l] < x)
{
PD[++l] = x;
P[l] = new Nod();
P[l]->val = x;
P[l]->t = P[l - 1];
return;
}
int st = 1, dr = l, mij, res;
while (st <= dr)
{
mij = (st + dr) / 2;
if (PD[mij] >= x)
{
res = mij;
dr = mij - 1;
}
else
{
st = mij + 1;
}
}
P[res] = new Nod();
P[res]->val = x;
P[res]->t = P[res - 1];
PD[res] = x;
}
void Afisare(Nod* N)
{
if (N == nullptr) { return; }
Afisare(N->t);
fout << N->val << ' ';
}