Pagini recente » Cod sursa (job #571918) | Cod sursa (job #2693251) | Cod sursa (job #650130) | Cod sursa (job #1039833) | Cod sursa (job #1706440)
# include <fstream>
# define MAX_N 1000001
int v[MAX_N], n;
//# define v ( v - 1 )
using namespace std;
int cbin_equal( int val ) {
int pos, pas;
pos = 0;
for ( pas = 20; pas >= 0; pas -- ) {
if ( pos + ( 1 << pas ) <= n && v[pos + ( 1 << pas )] <= val )
pos += ( 1 << pas );
}
return ( pos != 0 && v[pos] == val ? pos : -1 );
}
int cbin_smaller( int val ) {
int pos, pas;
pos = 0;
for ( pas = 20; pas >= 0; pas -- )
if ( pos + ( 1 << pas ) <= n && v[pos + ( 1 << pas )] <= val )
pos += ( 1 << pas );
return pos;
}
int cbin_bigger( int val ) {
int pos, pas;
pos = 0;
for ( pas = 20; pas >= 0; pas -- )
if ( pos + ( 1 << pas ) <= n && v[pos + ( 1 << pas )] < val )
pos += ( 1 << pas );
return pos + 1;
}
int main() {
ifstream fin( "cautbin.in" );
ofstream fout( "cautbin.out" );
int i, m, x, t, p;
fin >> n;
for ( i = 1; i <= n; i ++ )
fin >> v[i];
fin >> m;
for ( i = 1; i <= m; i ++ ) {
fin >> t >> x;
switch( t ) {
case 0:
fout << cbin_equal( x );
break;
case 1:
fout << cbin_smaller( x );
break;
case 2:
fout << cbin_bigger( x );
break;
}
if ( i != m )
fout << endl;
}
fin.close();
fout.close();
return 0;
}