Pagini recente » Cod sursa (job #2049872) | Cod sursa (job #2503048) | Cod sursa (job #1383518) | Cod sursa (job #1528963) | Cod sursa (job #3029969)
#include <bits/stdc++.h>
#define MAXN 100000
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int binarySearch(int n, int arr[], int x) {
int lo = 0, hi = n - 1, pos = -1;
while (lo <= hi) {
int mid = lo + (hi - lo) / 2;
if (x >= arr[mid]) {
lo = mid + 1;
pos = mid;
} else
hi = mid - 1;
}
return (arr[pos] == x ? pos + 1 : -1);
}
int lowerBound(int n, int arr[], int x) {
int lo = 0, hi = n - 1, pos = -1;
while (lo <= hi) {
int mid = lo + (hi - lo) / 2;
if (x >= arr[mid]) {
lo = mid + 1;
pos = mid;
} else
hi = mid - 1;
}
return pos + 1;
}
int higherBound(int n, int arr[], int x) {
int lo = 0, hi = n - 1, pos = -1;
while (lo <= hi) {
int mid = lo + (hi - lo) / 2;
if (x <= arr[mid]) {
hi = mid - 1;
pos = mid;
} else
lo = mid + 1;
}
return pos + 1;
}
int main() {
int n, arr[MAXN], m;
fin >> n;
for (int i = 0; i < n; i++)
fin >> arr[i];
sort(arr, arr + n);
fin >> m;
for (int q = 0; q < m; q++) {
int t, x;
fin >> t >> x;
switch (t) {
case 0:
fout << binarySearch(n, arr, x) << '\n';
break;
case 1:
fout << lowerBound(n, arr, x) << '\n';
break;
case 2:
fout << higherBound(n, arr, x) << '\n';
break;
}
}
return 0;
}