Pagini recente » Diferente pentru home intre reviziile 616 si 615 | Cod sursa (job #1279883) | Cod sursa (job #1383589) | Cod sursa (job #3171256) | Cod sursa (job #1264843)
#include <cstdio>
using namespace std;
int v[1005];
int bs3(int st,int dr,int val)
{
int med,last=-1;
while(st<=dr)
{
med=dr-(dr-st)/2;
if(v[med]<=val)
{
last=med;
st=med+1;
}
else dr=med-1;
}
return last;
}
int bs2(int st,int dr,int val)
{
int med,last=-1;
while(st<=dr)
{
med=dr-(dr-st)/2;
if(v[med]>=val)
{
last=med;
dr=med-1;
}
else st=med+1;
}
return last;
}
int main()
{
freopen("cautbin.in","r",stdin);
freopen("cautbin.out","w",stdout);
int n,m,x,i,op;
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",&op,&x);
if(op==0)
{
op=bs3(1,n,x);
if(op>0 && v[op]==x)
printf("%d\n",op);
else printf("-1");
}
if(op==1)
{
op=bs3(1,n,x);
printf("%d\n",op);
}
if(op==2)
{
op=bs2(1,n,x);
printf("%d\n",op);
}
}
return 0;
}