Pagini recente » Cod sursa (job #1240739) | Cod sursa (job #2801993) | Cod sursa (job #255030) | Cod sursa (job #613746) | Cod sursa (job #539049)
Cod sursa(job #539049)
#include "stdio.h"
int v[100000];
int cauta_bin(int *v, int n, int opt, int x)
{
int st,dr;
int keep = -1;
int mkeep = -1;
st = 0;
dr = n-1;
if(v == NULL)
{
return -1;
}
switch(opt)
{
case 0:
{
while(st<=dr)
{
if(v[(st+dr)/2]== x)
{
keep = (st+dr)/2;
st = (st+dr)/2 + 1;
continue;
}
if(v[(st+dr)/2]> x)
{
dr = (st+dr)/2 - 1;
continue;
}
if(v[(st+dr)/2]< x)
{
st = (st+dr)/2 + 1;
continue;
}
}
return keep;
}
case 1:
{
while(st<=dr)
{
if(v[(st+dr)/2]== x)
{
keep = (st+dr)/2;
st = (st+dr)/2 + 1;
continue;
}
if(v[(st+dr)/2]> x)
{
dr = (st+dr)/2 - 1;
continue;
}
if(v[(st+dr)/2]< x)
{
mkeep = (st+dr)/2;
st = (st+dr)/2 + 1;
continue;
}
}
if(keep != -1)
{
return keep;
}
else
{
return mkeep;
}
}
case 2:
{
while(st<=dr)
{
if(v[(st+dr)/2]== x)
{
keep = (st+dr)/2;
dr = (st+dr)/2 - 1;
continue;
}
if(v[(st+dr)/2]> x)
{
mkeep = (st+dr)/2;
dr = (st+dr)/2 - 1;
continue;
}
if(v[(st+dr)/2]< x)
{
st = (st+dr)/2 + 1;
continue;
}
}
if(keep != -1)
{
return keep;
}
else
{
return mkeep;
}
}
}
return -2;
}
int main()
{
FILE *f,*g;
int n,m,opt,x;
int i=0;
int rez;
f = fopen("cautbin.in","r");
g = fopen("cautbin.out","w");
fscanf(f,"%d ",&n);
while(i<n)
{
fscanf(f,"%d ",&v[i]);
i++;
}
fscanf(f,"%d ",&m);
i = 0;
while(i<m)
{
fscanf(f,"%d %d ", &opt, &x);
rez = cauta_bin(v, n, opt, x);
fprintf(g,"%d \n", rez+1);
i++;
}
fclose(f);
fclose(g);
return 0;
}