Pagini recente » Cod sursa (job #2934687) | Cod sursa (job #2116894) | Cod sursa (job #529347) | Cod sursa (job #2196623) | Cod sursa (job #823603)
Cod sursa(job #823603)
#include<stdio.h>
#include<malloc.h>
int cauta(int x, int* vect, int n)
{
int st = 0, dr = n, mid;
while(1){
mid = (st + dr) / 2;
if(x < vect[mid]){
if( st == dr ){
return st;
}
dr = mid;
}
else if(x > vect[mid]){
if ( st == dr ){
return n+1;
}
st = (st + dr + 1) / 2;
}
else
return mid;
}
}
int main(int argc, char* argv[])
{
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;
}