Pagini recente » Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #2021750) | Monitorul de evaluare | Cod sursa (job #1330995)
#include <fstream>
using namespace std;
int N, A[100010], j, M, Q, y, Nr,k ,ok;
ifstream in("cautbin.in");
ofstream out("cautbin.out");
int bsu(int val)
{
int i, step;
for (step = 1; step < N; step <<= 1);
for (i = 0; step; step >>= 1)
if (i + step <= N && A[i + step] <= val)
i += step;
return i;
}
int bsl(int val)
{
int i, step;
for (step = 1; step < N; step <<= 1);
for (i = 0; step; step >>= 1)
if (i + step <= N && A[i + step] < val)
i += step;
return i+1;
}
int main()
{
in >> N;
for( j = 1; j <= N; j++ ) in >> A[j];
in >> M;
for( j = 0; j < M; j++ )
{
in >> Q;
in >> Nr;
if( Q == 0 )
{
y = bsu( Nr );
if( A[y] == Nr )
out << y << '\n';
else
out << -1 << '\n';
}
if( Q == 1 )
{
out << bsl( Nr+1 ) - 1 <<'\n';
}
ok = 0;
if( Q == 2 )
{
out << bsu( Nr-1 ) + 1 <<'\n';
}
}
return 0;
}