Pagini recente » Monitorul de evaluare | Cod sursa (job #2342294) | Cod sursa (job #964276) | Cod sursa (job #2507105) | Cod sursa (job #1329623)
#include <stdio.h>
FILE *in, *out;
long int getInt()
{
long int a;
fscanf(in,"%lu",&a);
return a;
}
void init()
{
in = fopen("cautbin.in","r");
out = fopen("cautbin.out","w");
}
long int cautBin0(long int *vec, long int len, long int x)
{
long int mid, st, dr;
st = 1;
dr = len;
while (st <= dr)
{
mid = (st + dr) / 2;
if(vec[mid] <= x)
st = mid + 1;
else
dr = mid - 1;
}
mid = (st + dr) / 2;
if(vec[mid] > x) mid--;
if(vec[mid] == x) return mid;
return -1;
}
long int cautBin1(long int *vec, long int len, long int x)
{
long int mid, st, dr;
st = 1;
dr = len;
while (st < dr)
{
mid = (st + dr) / 2;
if(vec[mid] <= x)
st = mid + 1;
else
dr = mid;
}
mid = (st + dr) / 2;
if(vec[mid] > x) mid--;
return mid;
}
long int cautBin2(long int *vec, long int len, long int x)
{
long int mid, st, dr;
st = 1;
dr = len;
while (st < dr)
{
mid = (st + dr) / 2;
if(vec[mid] < x)
st = mid + 1;
else
dr = mid;
}
mid = (st + dr) / 2;
if(vec[mid] > x) mid++;
return mid;
}
int main()
{
init();
long int vec[100001],i,n,m,x;
n = getInt();
for(i = 1;i <= n;i++)
vec[i] = getInt();
m = getInt();
for(i = 0; i < m;i++)
{
switch(getInt())
{
case 0:
x = getInt();
fprintf(out,"%lu\n",cautBin0(vec,n,x));
break;
case 1:
x = getInt();
fprintf(out,"%lu\n",cautBin1(vec,n,x));
break;
case 2:
x = getInt();
fprintf(out,"%lu\n",cautBin2(vec,n,x));
break;
default : fprintf(out,"-1\n");
}
}
return 0;
}