Pagini recente » Cod sursa (job #2710209) | Cod sursa (job #350822) | Cod sursa (job #2376859) | Cod sursa (job #1334127) | Cod sursa (job #1095691)
#include <cstdio>
int binary (int x, int len, int arr []) {
int l = 0;
int r = len-1;
int m = r/2;
while(arr[m]!=x) {
if (r<l)
return -1;
else if (arr[m]<x)
l=m+1;
else
r=m-1;
m=(r+l)/2;
}
return m;
}
int binaryOne (int x, int len, int arr []) { //highest pos of an elem x
int l = 0;
int r = len-1;
int m = r/2;
while(arr[m]!=x || (arr[m]==x && ( m!=(len-1) && arr[m+1]==x ) ) ) {
if (r<l)
return -1;
else if (arr[m]<x && (m==(len-1) || arr[m+1]>x))
return m;
else if (arr[m]<=x)
l=m+1;
else
r=m-1;
m=(r+l)/2;
}
return m;
}
int binaryZero (int x, int len, int arr []) { //highest pos of an elem x
int l = 0;
int r = len-1;
int m = r/2;
while(arr[m]!=x || (arr[m]==x && ( m!=(len-1) && arr[m+1]==x ) ) ) {
if (r<l)
return -1;
else if (arr[m]<=x)
l=m+1;
else
r=m-1;
m=(r+l)/2;
}
return m;
}
int main () {
freopen("cautbin.in","r",stdin);
freopen("cautbin.out","w",stdout);
int n;
scanf("%d",&n);
int data[n];
for (int i=0;i<n;i++)
scanf("%d",&data[i]);
int m;
scanf("%d",&m);
for (int i=0;i<m;i++) {
int order;
int arg;
scanf("%d",&order);
scanf("%d",&arg);
if (order==0) {
printf("%d\n",(binaryZero(arg,n,data) + 1));
}
else if (order==1){
printf("%d\n",(binaryOne(arg,n,data) + 1));
}
else if (order==2){
}
}
fclose(stdin);
fclose(stdout);
}