Pagini recente » Cod sursa (job #1924386) | Cod sursa (job #3286663) | Cod sursa (job #1136599) | Cod sursa (job #3291498) | Cod sursa (job #1428029)
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int n, A[100001], queries, tip, val;
int Binara(int val, int tip);
int main()
{
fin >> n;
for( int i = 1; i <= n; ++i )
fin >> A[i];
fin >> queries;
for( ; queries; --queries )
{
fin >> tip >> val;
fout << Binara(val, tip) << '\n';
}
return 0;
}
int Binara(int val, int tip)
{
int step, ans;
for( step = 1; step < n; step <<= 1 );
if( tip != 2 )
{
for( ans = 1; step; step >>= 1 )
if( ans + step <= n && A[ans + step] <= val )
ans += step;
if( !tip && A[ans] != val )
return -1;
return ans;
}
else
{
for( ans = n; step; step >>= 1 )
if( ans - step >= 1 && A[ans - step] >= val )
ans -= step;
return ans;
}
}