Pagini recente » Cod sursa (job #771412) | Cod sursa (job #2599440) | Cod sursa (job #1388487) | Cod sursa (job #422856) | Cod sursa (job #3336198)
#include <stdio.h>
#include <stdlib.h>
#define MAXN 100000
int v[MAXN], s[MAXN], pred[MAXN], sol[MAXN];
int search(int x, int n){
int step, poz;
poz = -1;
for(step = 1 << 16; step > 0; step >>= 1){
if(poz + step < n && v[s[poz + step]] < x){
poz += step;
}
}
return poz;
}
int main()
{
FILE *fin, *fout;
fin = fopen("scmax.in", "r");
fout = fopen("scmax.out", "w");
int n, i, lmax, poz, l;
fscanf(fin, "%d", &n);
lmax = 0;
for(i = 0; i < n; i++){
fscanf(fin, "%d", &v[i]);
l = search(v[i], lmax) + 1;
s[l] = i;
pred[i] = l > 0 ? s[l - 1] : -1;
if(l + 1 > lmax){
lmax = l + 1;
}
}
fprintf(fout, "%d\n", lmax);
poz = s[lmax - 1];
i = lmax - 1;
while(poz >= 0){
sol[i] = v[poz];
poz = pred[poz];
i--;
}
for(i = 0; i < lmax; i++){
fprintf(fout, "%d ", sol[i]);
}
return 0;
}