Pagini recente » Cod sursa (job #870867) | Cod sursa (job #1916079) | Cod sursa (job #321497) | Borderou de evaluare (job #1569673) | Cod sursa (job #2736735)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
const int N_MAX = 1e5 + 5;
int N, M;
int v[N_MAX];
int op, x;
int MinSearch(int val)
{
int st = 1, dr = N, mid, best;
while (st <= dr) {
mid = (1LL * st + dr) / 2;
if (v[mid] <= val) {
best = mid;
st = mid + 1;
}
else {
dr = mid - 1;
}
}
return best;
}
int MaxSearch(int val)
{
int st = 1, dr = N, mid, best;
while (st <= dr) {
mid = (1LL * st + dr) / 2;
if (v[mid] >= val) {
best = mid;
dr = mid - 1;
}
else {
st = mid + 1;
}
}
return best;
}
int main()
{
fin >> N;
for (int i = 1; i <= N; i++) {
fin >> v[i];
}
fin >> M;
for (int i = 1; i <= M; i++) {
fin >> op >> x;
if (op == 0) {
int pos = MinSearch(x);
if (v[pos] == x) {
fout << pos << "\n";
}
else {
fout << "-1\n";
}
}
else if (op == 1) {
int pos = MinSearch(x);
fout << pos << "\n";
}
else if (op == 2) {
int pos = MaxSearch(x);
fout << pos << "\n";
}
}
return 0;
}