Pagini recente » Cod sursa (job #2874324) | Cod sursa (job #2595622) | Cod sursa (job #2985878) | Cod sursa (job #646124) | Cod sursa (job #1200692)
#include <cstdio>
using namespace std;
#define MAX 10005
int bsearch0(int key), bsearch1(int key), bsearch2(int key);
int v[MAX], n;
int main()
{
freopen("cautbin.in","r",stdin);
freopen("cautbin.out","w",stdout);
int i, m, cod, val;
scanf("%d",&n);
for(i=1; i<=n; i++)
scanf("%d",v+i);
scanf("%d",&m);
for(i=1; i<=m; i++)
{
scanf("%d %d",&cod, &val);
if(cod==0)
printf("%d\n",bsearch0(val));
else if(cod==1)
printf("%d\n",bsearch1(val));
else if(cod==2)
printf("%d\n",bsearch2(val));
}
return 0;
}
int bsearch0(int key)
{
int st=1, dr=n, mid;
while(st <= dr)
{
mid = (st+dr)/2;
if(v[mid] <= key)
st = mid+1;
else
dr = mid-1;
}
mid = (st+dr)/2;
if(v[mid] > key) mid--;
if(v[mid] == key)
return mid;
return -1;
}
int bsearch1(int key)
{
int st=1, dr=n, mid;
while(st < dr)
{
mid = (st+dr)/2;
if(v[mid] <= key)
st = mid+1;
else
dr = mid;
}
mid = (st+dr)/2;
if(v[mid] > key) mid--;
return mid;
}
int bsearch2(int key)
{
int st=1, dr=n, mid;
while(st < dr)
{
mid = (st+dr)/2;
if(v[mid] < key)
st = mid+1;
else
dr = mid;
}
mid = (st+dr)/2;
if(v[mid] < key) mid++;
return mid;
}