Pagini recente » Cod sursa (job #602173) | Cod sursa (job #463131) | Cod sursa (job #1814233) | Cod sursa (job #1848774) | Cod sursa (job #2901400)
#include <stdio.h>
int v[100000];
int l[100000];
int main() {
FILE *fin, *fout;
int n;
int i, mijloc;
int stanga, dreapta;
int res;
fin = fopen("scmax.in", "r");
fscanf(fin, "%d", &n);
for (i = 0; i < n; i++)
fscanf(fin, "%d", &v[i]);
fclose(fin);
for (i = 0; i < n; i++)
l[i] = 2000000000;
res = 1;
l[1] = v[0];
for (i = 0; i < n; i++) {
stanga = 1;
dreapta = res + 1;
while (dreapta - stanga > 1) {
mijloc = (stanga + dreapta) / 2;
if (l[mijloc] > v[i])
dreapta = mijloc;
else
stanga = mijloc;
}
if (l[stanga] < v[i]) {
stanga++;
res++;
}
if (l[stanga] > v[i]) {
l[stanga] = v[i];
}
}
fout = fopen("scmax.out", "w");
res = 0;
for (i = 1; i <= n; i++)
if (l[i] < 2000000000)
res++;
fprintf(fout, "%d\n", res - 1);
for (i = 1; i < res; i++)
fprintf(fout, "%d ", l[i]);
fclose(fout);
return 0;
}