Pagini recente » Cod sursa (job #67535) | Cod sursa (job #67526) | Cod sursa (job #2664393) | Cod sursa (job #1978109) | Cod sursa (job #2114613)
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
const int NMAX = 1e5 + 1;
int n, m;
int a[NMAX];
inline int lowerBoundSearch(int val, int op) {
int st = 1, dr = n, mid;
int ans = 1; // answer
// lower bound - cea mai mare pozitie cu valoare <= decat "val"
while (st <= dr) {
mid = (st + dr) / 2;
if (a[mid] <= val) {
ans = mid;
st = mid + 1;
}
else if (a[mid] > val)
dr = mid - 1;
}
if (op == 0 && a[ans] != val)
return -1;
return ans;
}
inline int upperBoundSearch(int val) {
int st = 1, dr = n, mid;
int ans = 1; // answer
// upper bound - cea mai mica pozitie cu valoare >= decat "val"
while (st <= dr) {
mid = (st + dr) / 2;
if (a[mid] < val) {
st = mid + 1;
}
else if (a[mid] >= val) {
ans = mid;
dr = mid - 1;
}
}
return ans;
}
int main()
{
fin >> n;
for (int i = 1; i <= n; ++i)
fin >> a[i];
fin >> m;
int op, val;
while (m--) {
fin >> op >> val;
if (op <= 1)
fout << lowerBoundSearch(val, op) << '\n';
else
fout << upperBoundSearch(val) << '\n';
}
return 0;
}