Pagini recente » Cod sursa (job #1864824) | Borderou de evaluare (job #2952783) | Borderou de evaluare (job #858215) | Borderou de evaluare (job #967534) | Cod sursa (job #1970755)
#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 Bsearch_upper(int val) {
int l = 1, r = n, p = -1;
while (l <= r) {
int m = l + ((r - l) >> 1);
if (V[m] <= val) {
p = m;
l = m + 1;
} else {
r = m - 1;
}
}
return p;
}
int Bsearch_lower(int val) {
int l = 1, r = n, p = -1;
while (l <= r) {
int 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 = Bsearch_upper(x);
if (V[p] != x) {
fout << "-1\n";
} else {
fout << p << "\n";
}
} else if (op == 1) {
int p = Bsearch_upper(x);
fout << p << '\n';
} else {
int p = Bsearch_lower(x);
fout << p << "\n";
}
}
return 0;
}