Pagini recente » Cod sursa (job #2444381) | Cod sursa (job #2786509)
#include <stdio.h>
#define MAX_N 132000
int v[MAX_N];
int main() {
FILE *fin, *fout;
int n, q, tip, x, p2, p, pas, i;
fin = fopen( "cautbin.in", "r" );
fscanf( fin, "%d", &n );
for ( i = 0; i < n; i++ )
fscanf( fin, "%d", &v[i] );
p2 = 1;
while ( (p2 << 1) <= n )
p2 <<= 1;
for ( i = n; i < (p2 << 1); i++ )
v[i] = ((unsigned)1 << 31) - 1;
fout = fopen( "cautbin.out", "w" );
fscanf( fin, "%d", &q );
for ( i = 0; i < q; i++ ) {
fscanf( fin, "%d%d", &tip, &x );
if ( tip == 0 ) {
pas = p2;
p = 0;
while ( pas > 0 ) {
if ( v[p + pas] <= x )
p += pas;
pas >>= 1;
}
fprintf( fout, "%d\n", v[p] == x ? p + 1 : -1 );
}
else if ( tip == 1 ) {
pas = p2;
p = 0;
while ( pas > 0 ) {
if ( v[p + pas] <= x )
p += pas;
pas >>= 1;
}
fprintf( fout, "%d\n", p + 1 );
}
else {
pas = p2;
p = 0;
while ( pas > 0 ) {
if ( v[p + pas] < x )
p += pas;
pas >>= 1;
}
fprintf( fout, "%d\n", p + 2 );
}
}
fclose( fin );
fclose( fout );
return 0;
}