Pagini recente » Cod sursa (job #2955590) | Cod sursa (job #126896) | Cod sursa (job #805351) | Cod sursa (job #1959047) | Cod sursa (job #2530759)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
#define nMax 100
#define max(a, b) ((a > b) ? a : b)
#define min(a, b) ((a < b) ? a : b)
int n, v[nMax];
int binary_search(int st, int dr, int val)
{
if (st > dr) return -1;
if (st == dr) {
if (val == v[dr]) return dr;
else return -1;
}
int m = st + (dr - st) / 2;
if (val == v[m]) return max(binary_search(m + 1, dr, val), m);
if (val < v[m]) return binary_search(st, m - 1, val);
else return binary_search(m + 1, dr, val);
}
int binary_search1(int st, int dr, int val)
{
if (st > dr) return -1;
if (st == dr) {
if (val >= v[dr]) return dr;
else return -1;
}
int m = st + (dr - st) / 2;
if (val >= v[m]) return max(binary_search1(m + 1, dr, val), m);
else return binary_search1(st, m - 1, val);
}
int binary_search2(int st, int dr, int val)
{
if (st > dr) return -1;
if (st == dr) {
if (val <= v[dr]) return dr;
else return -1;
}
int m = st + (dr - st) / 2;
if (val <= v[m]) return min(binary_search2(st, m - 1, val), m);
else return binary_search2(m + 1, dr, val);
}
int main() {
int m;
f >> n;
for (int i = 1; i <= n; i++)
f >> v[i];
f >> m;
for (int i = 1; i <= m; i++) {
int q, val;
f >> q >> val;
if (q == 0) g << binary_search(1, n, val) << '\n';
if (q == 1) g << binary_search1(1, n, val) << '\n';
if (q == 2) g << binary_search2(1, n, val) << '\n';
}
}