Pagini recente » Cod sursa (job #1663502) | Cod sursa (job #2710946) | Cod sursa (job #2064418) | Cod sursa (job #1103374) | Cod sursa (job #1768234)
#include <cstdio>
using namespace std;
int v[100001],n;
int bsearch0 (int x) {
int i,pas;
pas = 1 << 16;
i = 1;
while (pas) {
if (i + pas <= n && v[i + pas] == x)
i += pas;
pas /= 2;
}
if (i == 0)
i = -1;
return i;
}
int bsearch1 (int x) {
int i,pas;
pas = 1 << 16;
i = 1;
while (pas) {
if (i + pas <= n && v[i + pas] <= x)
i += pas;
pas /= 2;
}
return i;
}
int bsearch2 (int x) {
int i,pas;
pas = 1 << 16;
i = n;
while (pas) {
if (i - pas > 0 && v[i - pas] >= x)
i -= pas;
pas /= 2;
}
return i;
}
int main(){
freopen("cautbin.in","r",stdin);
freopen("cautbin.out","w",stdout);
int m,x,nr,i;
scanf("%d",&n);
for (i=1;i<=n;i++)
scanf("%d",&v[i]);
scanf("%d",&m);
for (i=0;i<m;i++) {
scanf("%d%d",&nr,&x);
if (nr == 0)
printf("%d\n",bsearch0(x));
else if (nr == 1)
printf("%d\n",bsearch1(x));
else
printf("%d\n",bsearch2(x));
}
return 0;
}