Pagini recente » Cod sursa (job #2301676) | Cod sursa (job #2954606) | Cod sursa (job #2771982) | Cod sursa (job #1672863) | Cod sursa (job #1106950)
#include <stdio.h>
#include <stdlib.h>
int v[100001];
int main()
{
int j,x,m,a,b,s,d,i,n;
freopen("cautbin.in","r",stdin);
freopen("cautbin.out","w",stdout);
scanf("%d",&n);
for(i=1; i<=n; i++)
scanf("%d",&v[i]);
scanf("%d",&m);
x=m;
for(i=0; i<x; i++){
scanf("%d%d",&a,&b);
switch(a){
case 0:
s=1;
d=n;
m=n/2;
while(abs(d-s)>1 && v[m]!=b){
if(b<v[m])
d=m,m=(s+d)/2;
else
s=m,m=(s+d)/2;
}
if(v[m]!=b)
printf("-1\n");
else
{
j=m;
while(v[j]==b)
j++;
printf("%d\n",j-1);
}
break;
case 1:
s=1;
d=n;
m=n/2;
while(abs(d-s)>1 && v[m]!=b){
if(b<v[m])
d=m,m=(s+d)/2;
else
s=m,m=(s+d)/2;
}
if(v[m]!=b)
printf("%d\n",m-1);
else{
while(v[m]==b)
m++;
printf("%d\n",m-1);
}
break;
case 2:
s=1;
d=n;
m=n/2;
while(abs(d-s)>1 && v[m]!=b){
if(b<v[m])
d=m,m=(s+d)/2;
else
s=m,m=(s+d)/2;
}
if(v[m]!=b)
printf("%d\n",m+1);
else
printf("%d\n",m);
}
}
return 0;
}