Pagini recente » Cod sursa (job #1279715) | Cod sursa (job #50118) | Cod sursa (job #2036278) | Cod sursa (job #2420302) | Cod sursa (job #1200716)
#include <cstdio>
using namespace std;
#define MAX 100005
int v[MAX];
int bsearch0(int st, int dr, int key)
{
int 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 st, int dr, int key)
{
int 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 st, int dr, int key)
{
int 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 main()
{
freopen("cautbin.in","r",stdin);
freopen("cautbin.out","w",stdout);
int i, m, n, cod, val;
scanf("%d",&n);
for(i=1; i<=n; i++)
scanf("%d",&v[i]);
scanf("%d",&m);
while(m)
{
m--;
scanf("%d%d",&cod, &val);
if(cod==0)
printf("%d\n",bsearch0(1,n,val));
else if(cod==1)
printf("%d\n",bsearch1(1,n,val));
else if(cod==2)
printf("%d\n",bsearch2(1,n,val));
}
return 0;
}