Pagini recente » Diferente pentru preoni-2006/runda-2/solutii intre reviziile 9 si 8 | Diferente pentru autumn-warmup-2007/solutii/runda-3 intre reviziile 33 si 32 | Clasament ada23 | Monitorul de evaluare | Cod sursa (job #1287445)
#include <cstdio>
using namespace std;
const int NMax = 1e5 + 2;
int n;
int A[NMax];
int Binary(int val)
{
int lo=0, hi=n+1;
while(hi-lo>1)
{
int mid= lo + (hi-lo)/2;
if(A[mid]>val)
hi=mid;
else
lo=mid;
}
return lo;
}
int main()
{
freopen("cautbin.in","r",stdin);
freopen("cautbin.out","w",stdout);
int i,op,x,m,poz;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&A[i]);
scanf("%d",&m);
for(i=1;i<=m;i++)
{
scanf("%d %d",&op,&x);
if(op == 0)
{
poz=Binary(x);
if(A[poz] == x ) printf("%d\n",poz);
else
printf("-1\n");
}
else if(op == 1)
{
poz=Binary(x);
printf("%d\n",poz);
}
else
{
poz=Binary(x-1);
printf("%d",poz+1);
}
}
}