Pagini recente » Cod sursa (job #1265791) | Cod sursa (job #2102889) | Cod sursa (job #570964) | Monitorul de evaluare | Cod sursa (job #2721789)
#include <fstream>
#define N 100000
#define L 20
using namespace std;
ifstream fin( "cautbin.in" );
ofstream fout( "cautbin.out" );
int v[N + 1];
int n;
int pb01( int v[], int n, int e ) {
int poz = 1, put = 1 << L;
while ( put ) {
if ( poz + put <= n && v[poz + put] <= e )
poz += put;
put /= 2;
}
return poz;
}
int pb2( int v[], int n, int e ) {
int poz = 1, put = 1 << L;
while ( put ) {
if ( poz + put <= n && v[poz + put] < e )
poz += put;
put /= 2;
}
return poz + 1;
}
int main() {
int q, t, e, poz;
fin >> n;
for ( int i = 1; i <= n; i ++ )
fin >> v[i];
fin >> q;
for ( int i = 1; i <= q; i ++ ) {
fin >> t >> e;
switch ( t ) {
case 0:
poz = pb01( v, n, e );
if ( v[poz] == e )
fout << poz << "\n";
else
fout << "-1\n";
break;
case 1:
fout << pb01( v, n, e ) << "\n";
break;
case 2:
fout << pb2( v, n, e ) << "\n";
break;
default:
break;
}
}
return 0;
}