Pagini recente » Cod sursa (job #1705554) | Cod sursa (job #1907991) | Cod sursa (job #118912) | Cod sursa (job #2661336) | Cod sursa (job #1119042)
#include <stdio.h>
#define N_MAX 100000
int N, M, v[ N_MAX + 1 ];
int bs0( int val ) {
int beg = 1, end = N + 1;
while( end - beg > 1 ) {
int med = ( beg + end ) / 2;
if( v[ med ] <= val ) {
beg = med;
} else {
end = med;
}
}
return v[ beg ] == val ? beg : -1;
}
int bs1( int val ) {
int beg = 1, end = N + 1;
while( end - beg > 1 ) {
int med = ( beg + end ) / 2;
if( v[ med ] <= val ) {
beg = med;
} else {
end = med;
}
}
return beg;
}
int bs2( int val ) {
int beg = 1, end = N + 1;
while( end - beg > 1 ) {
int med = ( beg + end ) / 2;
if( v[ med ] >= val ) {
end = med;
} else {
beg = med;
}
}
return end;
}
int main( ) {
FILE * fin, * fout;
fin = fopen( "cautbin.in", "r" );
fout = fopen( "cautbin.out", "w" );
fscanf( fin, "%d", &N );
int i;
for( i = 1; i <= N; i ++ ) {
fscanf( fin, "%d", v + i );
}
fscanf( fin, "%d", &M );
for( i = 1; i <= M; i ++ ) {
int type, val;
fscanf( fin, "%d%d", &type, &val );
switch( type ) {
case 0:
fprintf( fout, "%d\n", bs0( val ) );
break;
case 1:
fprintf( fout, "%d\n", bs1( val ) );
break;
case 2:
fprintf( fout, "%d\n", bs2( val ) );
}
}
fclose( fin );
fclose( fout );
}