Pagini recente » Cod sursa (job #1541400) | Cod sursa (job #610349) | Cod sursa (job #2530510) | Cod sursa (job #1621905) | Cod sursa (job #1024235)
#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 ) out << func0() << '\n';
if ( key == 1 ) out << func1() << '\n';
if ( key == 2 ) out << func2() << '\n';
}
return 0;
}