Pagini recente » Cod sursa (job #1348694) | Cod sursa (job #2098318) | Cod sursa (job #2221816) | Cod sursa (job #149915) | Cod sursa (job #2815582)
#include <iostream>
#include <fstream>
#define NMAX 100000
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int n;
int v[NMAX];
int leftmostBinarySearch(int x) {
int mij, st = 0, dr = n - 1, ans = -1;
while (st <= dr) {
mij = st + (dr - st) / 2;
if (v[mij] < x) st = mij + 1;
else {
ans = mij;
dr = mij - 1;
}
}
return ans;
}
int rightmostBinarySearch(int x) {
int mij, st = 0, dr = n - 1, ans = -1;
while (st <= dr) {
mij = st + (dr - st) / 2;
if (v[mij] > x) dr = mij - 1;
else {
ans = mij;
st = mij + 1;
}
}
return ans;
}
int main()
{
fin >> n;
for (int i = 0; i < n; ++i) fin >> v[i];
int left, right, x, queries, opt;
fin >> queries;
while (queries--) {
fin >> opt >> x;
switch (opt) {
case 0: {
right = rightmostBinarySearch(x);
fout << (v[right] == x ? right + 1 : -1);
break;
}
case 1: {
right = rightmostBinarySearch(x);
fout << right + 1;
break;
}
case 2: {
left = leftmostBinarySearch(x);
fout << left + 1;
break;
}
default: fout << "Optiunea nu exista in meniu";
}
fout << '\n';
}
fin.close();
fout.close();
return 0;
}