Pagini recente » Cod sursa (job #2012990) | Cod sursa (job #1846784) | Romanii la DisneyWorld - partea intai | Istoria paginii winter-challenge-2020/solutii/hidden | Cod sursa (job #1255969)
#include <fstream>
using namespace std;
int binarySearch(int left, int right, int v[], int type, int x);
int main()
{
int N, M, i;
ifstream f("cautbin.in");
f >> N;
int v[N], type, x;
for (i = 0; i < N; i++)
f >> v[i];
f >> M;
ofstream g("cautbin.out");
for (i = 0; i < M; i++)
{
f >> type;
f >> x;
g << binarySearch(0, N - 1, v, type, x) << "\n";
}
f.close();
g.close();
return 0;
}
int binarySearch(int left, int right, int v[], int type, int x)
{
int middle, i, pos = -1;
bool found = false;
int n = right;
while (left <= right && !found)
{
middle = left + (right - left) / 2;
if (v[middle] == x)
{
found = true;
if (type == 0 || type == 1)
for (i = middle; i < n - 1 && v[i + 1] == x; i++);
else
for (i = middle; i > 0 && v[i - 1] == x; i--);
pos = i;
}
else if (v[middle] < x)
{
left = middle + 1;
if (left > right)
{
if (type == 1)
pos = right;
else if (type == 2)
pos = left;
}
}
else
{
right = middle - 1;
if (left > right)
{
if (type == 1)
pos = left;
else if (type == 2)
pos = right;
}
}
}
return ++pos;
}