Pagini recente » Cod sursa (job #2488519) | Cod sursa (job #2260336) | Cod sursa (job #2892779) | Cod sursa (job #3214621) | Cod sursa (job #1798675)
#include <stdio.h>
#include <stdlib.h>
#define L 17
int v[100001];
int cautareBinara( int n, int x ) {
int r, pas;
r = 0;
pas = 1 << L;
while ( pas != 0 ) {
if ( r + pas <= n && v[r+pas] <= x )
r += pas;
pas /= 2;
}
return r;
}
int cautareBinaraMin( int n, int x ) {
int r, pas;
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, i, m, q, x, cb;
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 );
switch( q ) {
case 0:
cb = cautareBinara( n, x );
if ( v[cb] == x )
fprintf( fout, "%d\n", cb );
else
fprintf( fout, "-1" );
break;
case 1:
fprintf( fout, "%d\n", cautareBinara( n, x ) );
break;
case 2:
fprintf( fout, "%d\n", cautareBinaraMin( n, x ) );
break;
}
}
fclose( fin );
fclose( fout );
return 0;
}