Pagini recente » Cod sursa (job #2987270) | Cod sursa (job #1116392) | Cod sursa (job #2333588) | Cod sursa (job #3292134) | Cod sursa (job #823493)
Cod sursa(job #823493)
#include<stdio.h>
#include<malloc.h>
int cauta(int x, int* vect, int n)
{
int st = 0, dr = n;
while(1){
if(x < vect[(st + dr) / 2]){
if( st == dr ){
return st;
}
dr = (st + dr) / 2;
}
else if(x > vect[(st + dr) / 2]){
if ( st == dr ){
return n+1;
}
st = (st + dr + 1) / 2;
}
else
return ((st + dr) / 2);
}
}
int main()
{
int nrel, *el, *lung, *test, i, max = 0, poz;
FILE *f = fopen("scmax.in", "r");
FILE *g = fopen("scmax.out", "w");
fscanf(f, "%d", &nrel);
el = (int*)malloc(nrel * sizeof(int));
lung = (int*)malloc(nrel * sizeof(int));
test = (int*)malloc(nrel * sizeof(int));
fscanf(f, "%d", &el[0]);
test[0] = el[0];
lung[0] = 0;
max = 0;
for(i = 1 ; i < nrel ; ++i){
fscanf(f, "%d", &el[i]);
poz = cauta(el[i], test, max);
test[poz] = el[i];
lung[i] = poz;
if ( max < poz ){
max = poz;
}
}
fprintf(g, "%d\n", max+1);
for(nrel = 0 ; lung[nrel] != max ; ++nrel);
poz = max;
for(i = nrel ; poz >= 0 ; --i){
if( lung[i] == poz ){
test[poz] = el[i];
--poz;
}
}
for(i = 0 ; i <= max ; ++i){
fprintf(g, "%d ", test[i]);
}
free(el);
free(lung);
free(test);
fclose(f);
fclose(g);
return 0;
}