Pagini recente » Cod sursa (job #566239) | Cod sursa (job #694480) | Cod sursa (job #933643) | Cod sursa (job #1801867) | Cod sursa (job #1768242)
#include <cstdio>
using namespace std;
int n, v[100005];
int primul(int l, int x)
{
int i=0;
int pas=1<<l;
while(pas!=0){
if(i+pas <= n && v[i+pas]<=x)
i+=pas;
pas/=2;
}
return i;
}
int aldoilea(int l, int x)
{
int i=0;
int pas=1<<l;
while(pas!=0){
if(i+pas<=n && v[i+pas]<=x)
i+=pas;
pas/=2;
}
return i;
}
int altreilea(int l, int x)
{
int i=0;
int pas=1<<l;
while(pas!=0){
if(i+pas<=n && v[i+pas]<x)
i+=pas;
pas/=2;
}
return i+1;
}
int main()
{ freopen("cautbin.in", "r",stdin);
freopen("cautbin.out", "w",stdout);
int m,i,j,x,cer,r;
scanf("%d", &n);
for(i=1; i<=n; i++)
scanf("%d", &v[i]);
scanf("%d", &m);
for(j=1; j<=m; j++){
scanf("%d%d", &cer, &x);
switch(cer){
case 0:
r=primul(17, x);
if(v[r]==x)
printf("%d\n", primul(17, x));
else
printf("-1\n");
break;
case 1:
printf("%d\n", aldoilea(17, x));
break;
case 2:
printf("%d\n", altreilea(17, x));
break;
}
}
return 0;
}