Pagini recente » Cod sursa (job #1531283) | Cod sursa (job #2038744) | Cod sursa (job #2966546) | Cod sursa (job #756068) | Cod sursa (job #1970748)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("cautbin.in");
ofstream fout ("cautbin.out");
const int maxn = 1e5 + 5;
int V[maxn], n;
int Bin_search_1(int val) {
/// lower bound
int l = 1, r = n, m, p;
while (l <= r) {
m = l + ((r - l) >> 1);
if (V[m] <= val) {
p = l;
l = m + 1;
} else {
r = m - 1;
}
}
return p;
}
int Bin_search_2(int val) {
/// upper bound
int l = 1, r = n, p, m;
while (l <= r) {
m = l + ((r - l) >> 1);
if (V[m] < val) {
l = m + 1;
} else {
p = m;
r = m - 1;
}
}
return p;
}
int main() {
ios_base :: sync_with_stdio(false);
fin >> n;
for (int i = 1; i <= n; i++) {
fin >> V[i];
}
int m, op, x;
fin >> m;
while (m--) {
fin >> op >> x;
if (op == 0) {
int p = Bin_search_1(x);
if (V[p] != x) {
fout << "-1\n";
} else {
fout << p << "\n";
}
} else if (op == 1) {
int p = Bin_search_1(x);
fout << p << '\n';
} else {
int p = Bin_search_2(x);
fout << p << "\n";
}
}
return 0;
}