Pagini recente » Cod sursa (job #1459439) | Cod sursa (job #1746277) | Cod sursa (job #1071387) | Cod sursa (job #924049) | Cod sursa (job #369271)
Cod sursa(job #369271)
#include <stdio.h>
#define Nmax 100003
int v[Nmax], X[Nmax], T[Nmax];
int n, i, p, u, mid, sol;
FILE *f = fopen("scmax.in", "r");
FILE *g = fopen("scmax.out", "w");
void print_sol(int poz) {
if (poz) {
print_sol(T[poz]);
fprintf(g, "%d ", v[poz]);
}
}
int main() {
fscanf(f, "%d", &n);
for (i = 1; i <= n; i++)
fscanf(f, "%d", &v[i]);
X[1] = 1, sol = 1;
for (i = 2; i <= n; i++) {
p = 1, u = sol;
while (p <= u) {
mid = (u - p) / 2 + p;
if (v[i] > v[X[mid]])
p = mid + 1;
else
u = mid - 1;
}
//dupa cautarea binara, p ramane fie pe prima valoare mai mare decat cea cautata, fie pe sol + 1 (daca nu gasesc)
if (p > sol) //daca p > sol, inseamna ca p == sol + 1
sol++;
X[p] = i;
T[i] = X[p-1];
}
fprintf(g, "%d\n", sol);
print_sol(X[sol]);
fclose(f); fclose(g);
return 0;
}