Pagini recente » Cod sursa (job #2607357) | Cod sursa (job #13747) | Cod sursa (job #2857995) | Cod sursa (job #7894) | Cod sursa (job #1751838)
#include <iostream>
#include <cstdio>
using namespace std;
int v[100001],log=1,n;
int caut(int val)
{
int a=log,i=0;
for(a;a;a/=2)
{
if(i+a<=n&&val>=v[i+a])i+=a;
}
return i;
}
int despart(int st,int dr,int val)
{ if(st==dr||st>=dr)return st;
else if(dr>=n)return dr;
int m=st+(dr-st)/2;
if(v[m]>=val)despart(st,m,val);
else if(v[m]<val)despart(m+1,dr,val);
}
int caut2(int val)
{
int a=log,i=0,b;
for(a;a;a/=2)
{
if(i+a<n&&val>v[i+a])i+=a;
}
return i;
}
int main()
{freopen("cautbin.in","r",stdin);
freopen("cautbin.out","w",stdout);
int i,j,m,p;
scanf("%d",&n);
for(log=1;log<=n;log*=2);
for(i=1;i<=n;i++)scanf("%d",v+i);
scanf("%d",&m);
for(i=0;i<m;i++)
{
scanf("%d%d",&p,&j);
if(p==0)
{p=caut(j);
if(v[p]==j)
printf("%d\n",p);else printf("-1\n");
}
else if(p==1)
{
printf("%d\n",caut(j));
}
else
{
printf("%d\n",caut2(j)+1);
}
}
return 0;
}