Pagini recente » Cod sursa (job #2604379) | Cod sursa (job #76810) | Cod sursa (job #3187185) | Cod sursa (job #3234361) | Cod sursa (job #1756389)
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
int binary_search_0(const vector<int>& A, int x) {
int lo = -1, hi = A.size(), mid;
// A[lo] <= x < A[hi]
while (hi - lo > 1) {
mid = lo + (hi - lo) / 2;
if (A[mid] <= x) {
lo = mid;
} else {
hi = mid;
}
}
if (lo == -1 || A[lo] != x) {
return -1;
} else {
return lo + 1;
}
}
int binary_search_1(const vector<int>& A, int x) {
int lo = -1, hi = A.size(), mid;
// A[lo] <= x < A[hi]
while (hi - lo > 1) {
mid = lo + (hi - lo) / 2;
if (A[mid] <= x) {
lo = mid;
} else {
hi = mid;
}
}
return lo + 1;
}
int binary_search_2(const vector<int>& A, int x) {
int lo = -1, hi = A.size(), mid;
// A[lo] < x <= A[hi]
while (hi - lo > 1) {
mid = lo + (hi - lo) / 2;
if (x <= A[mid]) {
hi = mid;
} else {
lo = mid;
}
}
return hi + 1;
}
int main() {
ifstream fin("cautbin.in");
int elem_cnt;
fin >> elem_cnt;
vector<int> A(elem_cnt);
for (int i = 0; i < elem_cnt; ++i) {
fin >> A[i];
}
ofstream fout("cautbin.out");
int queries_cnt, operation_type, x;
fin >> queries_cnt;
for (int i = 0; i < queries_cnt; ++i) {
fin >> operation_type >> x;
switch (operation_type) {
case 0:
fout << binary_search_0(A, x) << '\n';
break;
case 1:
fout << binary_search_1(A, x) << '\n';
break;
case 2:
fout << binary_search_2(A, x) << '\n';
break;
}
}
return 0;
}