Pagini recente » Cod sursa (job #1674572) | Cod sursa (job #2183287) | Cod sursa (job #556088) | Cod sursa (job #1952367) | Cod sursa (job #1555156)
#include <iostream>
#include <cstdio>
using namespace std;
int n,m,a[100001],x,t;
int st, dr;
int c1()
{
while(st!=dr)
{
int m_=(st+dr)/2;
if(x>=a[m_])
st=m_+1;
else dr=m_;
}
if(st==dr)
{
if(a[st-1]==x)
/*{
while(a[st]==x)
st++;
return st-1;
}*/
return st-1;
else return -1;
}
}
int c2()
{
while(st!=dr)
{
int m_=(st+dr)/2;
if(x>=a[m_])
st=m_+1;
else dr=m_;
}
if(st==dr)
{
if(a[st-1]<=x)
{
/*while(a[st]<=x)
st++;*/
return st-1;
}
else return -1;
}
}
int c3()
{
while(st!=dr)
{
int m_=(st+dr)/2;
if(x>a[m_])
st=m_+1;
else dr=m_;
}
if(st==dr)
{
if(a[st]>=x)
{
/*while(a[st]>=x)
st--;*/
return st;
}
else return -1;
}
}
int main()
{
freopen("cautbin.in","r",stdin);
freopen("cautbin.out","w",stdout);
scanf("%d",&n);
for(int i=1; i<=n; i++)
scanf("%d",&a[i]);
scanf("%d",&m);
for(int i=1; i<=m; i++)
{
st=1,dr=n;
scanf("%d %d",&t,&x);
if(t==0)
printf("%d\n",c1());
else if(t==1)
printf("%d\n",c2());
else printf("%d\n",c3());
}
return 0;
}