Pagini recente » Cod sursa (job #1823980) | Cod sursa (job #394551) | Cod sursa (job #491454) | Cod sursa (job #1660097) | Cod sursa (job #1486643)
#include <cstdio>
using namespace std;
int n,i,m,t,k,a[100010];
int bsearch(int k)
{
int i,step;
for(step=1;step<n;step<<=1);
for(i=0;step;step>>=1)
if(i+step<=n&&a[i+step]<=k)
i+=step;
return i;
}
int bsearch1(int k)
{
int i,step;
for(step=1;step<n;step<<=1);
for(i=0;step;step>>=1)
if(i+step<=n&&a[i+step]<k)
i+=step;
return i;
}
int main()
{
freopen("cautbin.in","r",stdin);
freopen("cautbin.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
scanf("%d",&m);
while(m>0)
{
m--;
m=m;
scanf("%d%d",&t,&k);
if(t==0)
{
i=bsearch(k);
if(a[i]==k)
printf("%d\n",i);
else printf("%d\n",-1);
}
else if(t==1)
{
i=bsearch(k);
printf("%d\n",i);
}
else
{
i=bsearch1(k);
if(a[i+1]==k)
{
printf("%d\n",i+1);
}
else
{
i=bsearch(k);
printf("%d\n",i+1);
}
}
}
return 0;
}