Pagini recente » Cod sursa (job #2345392) | Cod sursa (job #926077) | Cod sursa (job #2031622) | Cod sursa (job #2662996) | Cod sursa (job #645220)
Cod sursa(job #645220)
#include<iostream>
#include<cstdio>
#define NMAX 100001
using namespace std;
int n,a[NMAX],m;
void read(){
int i;
scanf( "%d", &n );
for( i=0; i<n; ++i ){
scanf( "%d", &a[i] );
}
scanf( "%d", &m );
}
int binary_search_equal( int number, int a[], int len ){
int i, start=0, end=len, mid, pos = -1;
while( start < end ){
mid = start + (end - start) / 2;
if( a[mid] == number ){
pos = mid;
start = mid+1;
} else if( a[mid] < number ){
start = mid+1;
} else {
end = mid;
}
}
return pos != -1 ? ++pos : -1;
}
int binary_search_max( int number, int a[], int len ){
int i, start=0, end=len, mid, pos = -1;
while( start < end ){
mid = start + (end - start) / 2;
if( a[mid] <= number ){
start = mid+1;
pos = mid;
} else {
end = mid;
}
}
return pos != -1 ? ++pos : -1;
}
int binary_search_min( int number, int a[], int len ){
int i, start=0, end=len, mid, pos = -1;
while( start < end ){
mid = start + (end - start) / 2;
if( a[mid] < number ){
start = mid+1;
} else {
end = mid;
pos = mid;
}
}
return pos != -1 ? ++pos : -1;
}
int main(){
int i;
freopen( "cautbin.in", "r", stdin );
freopen( "cautbin.out", "w", stdout );
read();
for( i=0; i<m; ++i ){
int problem, number;
scanf( "%d %d", &problem, &number );
switch( problem ){
case 0:
printf( "%d\n", binary_search_equal( number, a, n ) );
break;
case 1:
printf( "%d\n", binary_search_max( number, a, n ) );
break;
case 2:
printf( "%d\n", binary_search_min( number, a, n ) );
break;
}
}
}