Pagini recente » Cod sursa (job #1906783) | Cod sursa (job #974802) | Cod sursa (job #1894639) | Cod sursa (job #912543) | Cod sursa (job #1956769)
#include <stdio.h>
FILE *fin = fopen("scmax.in", "r"), *fout = fopen("scmax.out", "w");
#define MAX_N 100000
int v[MAX_N + 1], aux[MAX_N + 1], poz[MAX_N + 1], sol[MAX_N + 1];
int n;
int main() {
fscanf(fin, "%d", &n);
int k = 0;
for(int i = 1;i <= n;i++) {
fscanf(fin, "%d", &v[i]);
int st, dr;
st = 0, dr = k;
while(st < dr) {
int mij = (st + dr) / 2;
if(aux[mij] == v[i])
st = dr = mij;
else if(aux[mij] < v[i])
st = mij + 1;
else if(aux[mij] > v[i])
dr = mij;
}
int mij = (st + dr) / 2;
if(st == k && v[i] >= aux[k])
k++;
aux[mij] = v[i];
poz[i] = mij;
}
fprintf(fout, "%d\n", k);
int j = k - 1;
for(int i = n;i >= 1;i--) {
if(poz[i] == j)
sol[j] = i, j--;
}
for(int i = 0;i < k;i++)
fprintf(fout, "%d ", v[sol[i]]);
fclose(fin);
fclose(fout);
return 0;
}