Pagini recente » Cod sursa (job #1968474) | Cod sursa (job #2650877) | Cod sursa (job #1766143) | Cod sursa (job #2910352) | Cod sursa (job #2696513)
#include <stdio.h>
#define NMAX 100000
FILE *fin, *fout;
int v[NMAX + 5], s[NMAX + 5], prev[NMAX + 5];
int cautbin(int e, int st, int dr) {
int ind, step;
ind = st - 1;
step = 1 << 16;
while (step){
if (ind + step <= dr && v[s[ind + step]] < e)
ind += step;
step >>= 1;
}
return ind;
}
void write(int pos) {
if (pos != -1) {
write(prev[pos]);
fprintf(fout, "%d ", v[pos]);
}
}
int main() {
fin = fopen("scmax.in", "r");
fout = fopen("scmax.out", "w");
int n, i, l, maxl;
fscanf(fin, "%d", &n);
for (i = 0; i < n; ++i)
fscanf(fin, "%d", &v[i]);
maxl = 0;
for (i = 0; i < n; ++i) {
l = cautbin(v[i], 0, maxl - 1) + 1;
s[l] = i;
if (l > 0)
prev[i] = s[l - 1];
else
prev[i] = -1;
if (l + 1 > maxl)
maxl = l + 1;
}
fprintf(fout, "%d\n", maxl);
write(s[maxl - 1]);
fclose(fout);
return 0;
}