Mai intai trebuie sa te autentifici.
Cod sursa(job #2346931)
Utilizator | Data | 18 februarie 2019 11:32:11 | |
---|---|---|---|
Problema | Cautare binara | Scor | 100 |
Compilator | c-64 | Status | done |
Runda | Arhiva educationala | Marime | 1.35 kb |
#include <stdio.h>
#include <stdlib.h>
#define L 16
int v[100001];
int main() {
int r, pas, i, a, x , n , m;
FILE *fin, *fout;
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", &a, &x );
if ( a == 0 ) {
r = 0;
pas = 1 << L;
while ( pas != 0 ) {
if ( r + pas <= n && v[r + pas] <= x ) {
r += pas;
}
pas /= 2;
}
if ( r == 0 || v[r] < x ) {
r = -1;
}
}
if ( a == 1 ) {
r = 0;
pas = 1 << L;
while ( pas != 0 ) {
if ( r + pas <= n && v[r + pas] <= x ) {
r += pas;
}
pas /= 2;
}
}
if ( a == 2 ) {
r = 0;
pas = 1 << L;
while ( pas != 0 ) {
if ( r + pas <= n && v[r + pas] < x ) {
r += pas;
}
pas /= 2;
}
r ++;
}
fprintf( fout, "%d\n", r );
}
fclose( fin );
fclose( fout );
return 0;
}