Pagini recente » Cod sursa (job #1585712) | Cod sursa (job #776624) | Cod sursa (job #3160132) | Cod sursa (job #1995572) | Cod sursa (job #2072006)
#include <stdio.h>
#include <stdlib.h>
#define L 17
int v[100001];
int cautBin( int n, int x ) {
int r = 0, pas = 1 << L;
while ( pas != 0 ) {
if ( r + pas <= n && v[r + pas] <= x )
r += pas;
pas /= 2;
}
return r;
}
int cautBinX( int n, int x ) {
int r = 0, pas = 1 << L;
while ( pas != 0 ) {
if ( r + pas <= n && v[r + pas] < x )
r += pas;
pas /= 2;
}
return r + 1;
}
int main() {
FILE *fin, *fout;
int n, m, i, q, x, a;
fin = fopen( "cautbin.in", "r" );
fout = fopen( "cautbin.out", "w" );
fscanf( fin, "%d", &n );
for ( i = 1; i <= n; i++ )
fscanf( fin, "%d", &v[i] );
fscanf( fin, "%d", &m );
for ( i = 0; i < m; i++ ) {
fscanf( fin, "%d%d", &q, &x );
if ( q == 0 ) {
a = cautBin( n, x );
if ( v[a] == x )
fprintf( fout, "%d\n", a );
else
fprintf( fout, "-1\n" );
} else if ( q == 1 ) {
fprintf( fout, "%d\n", cautBin( n, x ) );
} else if ( q == 2 ) {
fprintf( fout, "%d\n", cautBinX( n, x ) );
}
}
fclose( fin );
fclose( fout );
return 0;
}