Pagini recente » Cod sursa (job #432596) | Cod sursa (job #738720) | Cod sursa (job #2293860) | Cod sursa (job #2461435) | Cod sursa (job #2148347)
#include <fstream>
#include <iostream>
#include <algorithm>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int n, v[100005], m;
inline int bsearch1(int val)
{
int st = 1, dr = n, m;
while(st <= dr)
{
m = (st + dr) >> 1;
if(v[ m ] <= val) st = m + 1;
else dr = m - 1;
}
if(v[ st - 1 ] == val) return st - 1;
return -1;
}
inline int bsearch2(int val)
{
int st = 1, dr = n, m;
while(st <= dr)
{
m = (st + dr) >> 1;
if(v[ m ] <= val) st = m + 1;
else dr = m - 1;
}
if(v[ st - 1 ] <= val) return st - 1;
return -1;
}
inline int bsearch3(int val)
{
int st = 1, dr = n, m;
while(st <= dr)
{
m = (st + dr) >> 1;
if(v[ m ] >= val) dr = m - 1;
else st = m + 1;
}
if(v[ dr + 1 ] >= val) return dr + 1;
return -1;
}
int main()
{
int q, x;
f >> n;
for(int i = 1; i <= n; ++i) f >> v[i];
f >> m;
for(int i = 1; i <= m; ++i)
{
f >> q >> x;
if(q == 0) g << bsearch1( x ) << '\n';
else if(q == 1) g << bsearch2( x ) << '\n';
else g << bsearch3( x ) << '\n';
}
}