Pagini recente » Cod sursa (job #2950731) | Cod sursa (job #2099761) | Istoria paginii utilizator/mia_lungoci | Cod sursa (job #2495002) | Cod sursa (job #2272134)
#include <stdio.h>
int cautare_binara(int vector[], int lo, int hi, int caz, int val)
{
if (lo<=hi) {
int med = lo + (hi-lo)/2;
if (val<vector[med])
{
return cautare_binara(vector,lo,med-1,caz,val);
}
else if (val>vector[med])
{
return cautare_binara(vector,med+1,hi,caz,val);
}
else {
if (caz==0) {
if (vector[med+1]==val) return cautare_binara(vector,med+1,med+1,caz,val);
return med;
}
if (caz==1)
{
if (vector[med+1]>val && vector[med-1]<val) return med;
}
if (caz==2)
{
if (vector[med-1]<val && vector[med+1]>val) return med;
}
}
}
if (caz==2)
return lo;
if (caz==1)
return hi;
return -2;
}
int main()
{
FILE *inptr = fopen("cautbin.in","r");
FILE *outptr = fopen("cautbin.out","w");
int nr = 0;
fscanf(inptr,"%d", &nr);
int vector[nr];
for (int i=0;i<nr;i++)
{
fscanf(inptr,"%d ", &vector[i]);
}
int cases = 0;
fscanf(inptr,"%d", &cases);
int c, val;
while (cases>0)
{
fscanf(inptr,"%d %d", &c, &val);
fprintf(outptr,"%d\n", cautare_binara(vector, 0, nr-1, c, val)+1);
cases--;
}
return 0;
}