Cod sursa(job #284283)
#include <cstdio>
const int N = 100001;
int v[N],n,m;
int cautare_binara(int nr,int l1,int l2, int tip)
{
if (tip == 0)
{
int m;
++nr;
while(l1!=l2)
{
m=(l1+l2)/2;
if(nr<=v[m])
l2=m;
else
l1=1+m;
}
--nr;
if (v[l1] > nr)
--l1;
if (v [l1] != nr)
return -1;
return l1;
}
if (tip == 1)
{
int m;
while(l1!=l2)
{
m=(l1+l2)/2;
if(nr<=v[m])
l2=m;
else
l1=1+m;
}
if (v[l1] > nr)
--l1;
return l1;
}
int m;
while (l1!=l2)
{
m = (l1+l2)/2;
if (nr<=v[m])
l2 = m;
else
l1 = m + 1;
}
return l1;
}
void citire()
{
int tip,x,i;
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",&tip,&x);
printf ("%d\n",cautare_binara(x,1,n,tip));
}
}
int main()
{
freopen ("cautbin.in","r",stdin);
freopen ("cautbin.out","w",stdout);
citire();
return 0;
}