Pagini recente » Cod sursa (job #2080068) | Cod sursa (job #2264713) | Cod sursa (job #1884467) | Cod sursa (job #1386489) | Cod sursa (job #897482)
Cod sursa(job #897482)
#include <stdio.h>
using namespace std;
int v[100005];
int bs(int x,int n)
{
int st,dr,last,med;
st=1;dr=n;
while(st<=dr)
{
med=(st+dr)/2;
if(x>=v[med])
{
last=med;
st=med+1;
}
else
dr=med-1;
}
if(v[last]!=x)
return -1;
return last;
}
int bsr(int x,int n)
{
int st,dr,last,med;
st=1;dr=n;
while(st<=dr)
{
med=(st+dr)/2;
if(x>=v[med])
{
last=med;
st=med+1;
}
else
dr=med-1;
}
return last;
}
int bsl(int x,int n)
{
int st,dr,last,med;
st=1;dr=n;
while(st<=dr)
{
med=(st+dr)/2;
if(x<=v[med])
{
last=med;
dr=med-1;
}
else
st=med+1;
}
return last;
}
int main()
{
int i,n,m,q,x;
freopen("cautbin.in","r",stdin);
freopen("cautbin.out","w",stdout);
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",&q,&x);
if(q==0)
printf("%d\n",bs(x,n));
if(q==1)
printf("%d\n",bsr(x,n));
if(q==2)
printf("%d\n",bsl(x,n));
}
return 0;
}