Pagini recente » Cod sursa (job #58803) | Cod sursa (job #916154) | Cod sursa (job #2222292) | Cod sursa (job #818585) | Cod sursa (job #1411673)
#include <fstream>
const int MAX_N(100001);
const int MAX_LOG(16);
int n;
int v [MAX_N];
inline int Search1 (int val)
{
int result(0);
for (int i(1 << MAX_LOG); i; i >>= 1)
{
if (result + i > n)
continue;
if (v[result + i] <= val)
result += i;
}
return result;
}
inline int Search2 (int val)
{
int left(1), right(n), middle((left + right) / 2);
while (left < right)
{
if (v[middle] < val)
left = middle + 1;
else
right = middle;
middle = (left + right) / 2;
}
return middle;
}
int main (void)
{
std::ifstream input("cautbin.in");
std::ofstream output("cautbin.out");
input >> n;
for (int i(1) ; i <= n ; ++i)
input >> v[i];
int m;
input >> m;
int q, num;
while (m--)
{
input >> q >> num;
if (q == 0)
{
int result(Search1(num));
output << (v[result] == num ? result : -1);
}
else if (q == 1)
output << Search1(num);
else
output << Search2(num);
output.put('\n');
}
input.close();
output.close();
return 0;
}