Pagini recente » Borderou de evaluare (job #108575) | Borderou de evaluare (job #2584466) | Borderou de evaluare (job #229835) | Borderou de evaluare (job #1343425) | Cod sursa (job #1024230)
#include <iostream>
#include <fstream>
#define nmax 100005
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int n, m, v[nmax], key;
void citeste()
{
fin >> n;
for ( int i=1; i<=n; ++i )
fin >> v[i];
}
int func0()
{
int step, i, x;
fin >> x;
for ( step = 1; step <= n; step <<= 1 );
for ( i = 0; step; step >>= 1 )
if ( i + step <= n && v[i+step] <= x )
i += step;
if ( v[i] == x ) return i;
else return -1;
}
int func1()
{
int step, i, x;
fin >> x;
for ( step = 1; step <= n; step <<= 1 );
for ( i = 0; step; step >>= 1 )
if ( i + step <= n && v[i+step] <= x )
i += step;
return i;
}
int func2()
{
int step, i, x;
fin >> x;
for ( step = 1; step <= n; step <<= 1 );
for ( i = n; step; step >>= 1 )
if ( i - step > 0 && v[i-step] >= x )
i -= step;
return i;
}
int main()
{
citeste();
fin >> m;
while ( m-- )
{
fin >> key;
if ( key == 0 ) cout << func0() << '\n';
if ( key == 1 ) cout << func1() << '\n';
if ( key == 2 ) cout << func2() << '\n';
}
return 0;
}