Pagini recente » Cod sursa (job #2513770) | Cod sursa (job #895835) | Cod sursa (job #144702) | Cod sursa (job #2545168) | Cod sursa (job #3245612)
#include <iostream>
#include <fstream>
using namespace std;
#define N 100010
int v[N];
int bsearch0(int left, int right, int value) {
int middle;
while (left <= right) {
middle = (left + right) / 2;
if (v[middle] <= value)
left = middle + 1;
else
right = middle - 1;
}
middle = (left + right) / 2;
if (v[middle] > value) middle--;
if (v[middle] == value)
return middle;
return -1;
}
int bsearch1(int left, int right, int value) {
int middle;
while (left < right) {
middle = (left + right) / 2;
if (v[middle] <= value)
left = middle + 1;
else
right = middle;
}
middle = (left + right) / 2;
if (v[middle] > value)
middle--;
return middle;
}
int bsearch2(int left, int right, int value) {
int middle;
while (left < right) {
middle = (left + right) / 2;
if (v[middle] < value)
left = middle + 1;
else
right = middle;
}
middle = (left + right) / 2;
if (v[middle] < value)
middle++;
return middle;
}
int main() {
int i, n, m, tip, val;
ifstream in("cautbin.in");
ofstream out("cautbin.out");
in >> n;
for (i = 1; i <= n; ++i)
cin >> v[i];
in >> m;
while (m--) {
in >> tip >> val;
if (tip == 0)
out << bsearch0(1, n, val) << endl;
if (tip == 1)
out << bsearch1(1, n, val) << endl;
if (tip == 2)
out << bsearch2(1, n, val) << endl;
}
return 0;
}