Pagini recente » Cod sursa (job #2259762) | Cod sursa (job #695048) | Cod sursa (job #2739737) | Cod sursa (job #1667951) | Cod sursa (job #2079516)
#include <iostream>
#include <fstream>
using namespace std;
const int MAXN = 100001;
int n, a[MAXN];
int main(int argc, const char * argv[]) {
ifstream cin("cautbin.in");
ofstream cout("cautbin.out");
cin >> n;
for (int i = 1; i <= n; ++i) {
cin >> a[i];
}
int m;
cin >> m;
while (m--) {
int op, x;
cin >> op >> x;
int pas = 1 << 16;
int r = 0;
switch (op) {
case 0:
while (pas > 0) {
if (r + pas <= n && a[r + pas] <= x) {
r += pas;
}
pas >>= 1;
}
if (a[r] == x) {
cout << r;
} else {
cout << -1;
}
break;
case 1: {
int lo = 1, hi = n;
while (lo < hi) {
int mid = lo + (hi - lo + 1) / 2;
if (a[mid] > x) {
hi = mid - 1;
} else {
lo = mid;
}
}
cout << lo;
break;
}
case 2: {
int lo = 1, hi = n;
while (lo < hi) {
int mid = lo + (hi - lo) / 2;
if (a[mid] >= x) {
hi = mid;
} else {
lo = mid + 1;
}
}
cout << lo;
}
}
cout << '\n';
}
return 0;
}