Pagini recente » Cod sursa (job #2845133) | Cod sursa (job #2449383) | Cod sursa (job #572454) | Cod sursa (job #1896127) | Cod sursa (job #1658900)
#include <stdio.h>
#define N_MAX 100000
FILE *fin = fopen("scmax.in", "r");
FILE *fout = fopen("scmax.out", "w");
int N;
int v[N_MAX + 1], q[N_MAX + 1], p[N_MAX + 1], L[N_MAX + 1];
int main(){
int i, j, len_max = 1, st, dr, mij, pos;
fscanf(fin, "%d", &N);
fscanf(fin, "%d", &v[1]);
q[1] = v[1];
p[1] = 1;
for(i = 2; i <= N; i++){
fscanf(fin, "%d", &v[i]);
st = 1;
dr = len_max;
pos = -1;
while(st <= dr){
mij = (st + dr) / 2;
if(q[mij] < v[i]){
st = mij + 1;
pos = mij;
}
else if(q[mij] > v[i]){
dr = mij - 1;
}
else if(q[mij] == v[i]){
st = dr + 1;
pos = mij - 1;
}
}
if(pos == -1){
q[1] = v[i];
p[i] = 1;
}
else{
q[pos + 1] = v[i];
p[i] = pos + 1;
if(pos == len_max)
len_max++;
}
}
int c = len_max;
for(i = N; i >= 1 && c > 0; i--)
if(p[i] == c)
L[c--] = v[i];
fprintf(fout, "%d\n", len_max);
for(i = 1; i <= len_max; i++)
fprintf(fout, "%d ", L[i]);
fprintf(fout, "\n");
fclose(fin);
fclose(fout);
return 0;
}