Pagini recente » Cod sursa (job #1552398) | Cod sursa (job #1031812) | Monitorul de evaluare | Cod sursa (job #673544) | Cod sursa (job #1021614)
#include<cstdio>
using namespace std;
int v[100100];
int bs0(int st,int dr,int val)
{
int med,last=1;
while(st<=dr)
{
med=(st+dr)/2;
if(val==v[med])
last=med;
if(val<v[med])
dr=med-1;
else
st=med+1;
}
if(last==1)
return -1;
else
return last;
}
int bs1(int st,int dr,int val)
{
int med,last=1;
while(st<=dr)
{
med=(st+dr)/2;
if(val<=v[med])
last=med;
if(val<v[med])
dr=med-1;
else
st=med+1;
}
if(last==1)
return -1;
else
return last;
}
int bs2(int st,int dr,int val)
{
int med,last=1;
while(st<=dr)
{
med=(st+dr)/2;
if(val<=v[med])
{
last=med;
dr=med-1;
}
else
st=med+1;
}
if(last==1)
return -1;
else
return last;
}
int main()
{
freopen("cautbin.in","r",stdin);
freopen("cautbin.out","w",stdout);
int n,m,st,dr,t,x;
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&v[i]);
scanf("%d",&m);
st=1;dr=n;
for(int i=1;i<=m;i++)
{
st=1;dr=n;
scanf("%d %d",&t,&x);
if(t==0)
printf("%d\n",bs0(st,dr,x));
else
if(t==1)
printf("%d\n",bs0(st,dr,x));
else
printf("%d\n",bs2(st,dr,x));
}
return 0;
}