Pagini recente » Cod sursa (job #2635900) | Cod sursa (job #2373013) | Cod sursa (job #347900) | Cod sursa (job #1139275) | Cod sursa (job #2805828)
#include <cstdio>
#define N 100002
#include <iostream>
using namespace std;
FILE* f, * g;
int x[N], pred[N], v[N], lg;
void write(int poz)
{
if (pred[poz])
{
write(pred[poz]);
}
fprintf(g, "%d ", x[poz]);
}
int cb(int i)
{
if (lg == 0 || x[v[lg]] < x[i])
v[++lg] = i, pred[i] = v[lg - 1];
else
{
int st, dr, mij, poz = 1;
st = 1, dr = lg;
while (st <= dr)
{
mij = (st + dr) / 2;
if (x[v[mij]] < x[i])
poz = st = mij + 1;
else
dr = mij - 1;
}
v[poz] = i;
pred[i] = v[poz - 1];
}
}
int main()
{
f = fopen("scmax.in", "r");
g = fopen("scmax.out", "w");
int n;
fscanf(f, "%d", &n);
for (int i = 1;i <= n;++i)
{
fscanf(f, "%d", &x[i]);
cb(i);
}
fprintf(g, "%d\n", lg);
write(v[lg]);
fclose(f);
fclose(g);
return 0;
}