Pagini recente » Cod sursa (job #1814249) | Rating gigi becali (gigibecali) | Cod sursa (job #923071) | Cod sursa (job #814977) | Cod sursa (job #2892382)
#include <fstream>
#include <iostream>
#include <vector>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
vector<int> v;
int CautareBinaraEqual_LAST(int st, int dr, int val) {
// Cea mai mare pozitie pe care se afla un element cu valoarea x
int mid;
while (st <= dr) {
mid = (st + dr) / 2;
if (val >= v[mid])
st = mid + 1;
else
dr = mid - 1;
}
mid = (st + dr) / 2;
if (val < v[mid])
mid--;
if (val == v[mid])
return mid;
return -2;
}
int CautareBinaraLessOrEqual_LAST(int st, int dr, int val) {
// Cea mai mare pozitie pe care se afla un element cu valoarea <= x
int mid;
while (st < dr) {
mid = (st + dr) / 2;
if (val >= v[mid])
st = mid + 1;
else
dr = mid;
}
mid = (st + dr) / 2;
if (val < v[mid])
mid--;
return mid;
}
int CautareBinaraGreaterOrEqual_FIRST(int st, int dr, int val) {
int mid;
while (st < dr) {
mid = (st + dr) / 2;
if (val > v[mid])
st = mid + 1;
else
dr = mid;
}
mid = (st + dr) / 2;
if (val > v[mid])
mid--;
return mid;
}
int main() {
int nr;
f >> nr;
v.resize(nr);
for (int i = 0; i < nr; i++)
f >> v[i];
int t;
f >> t;
while (t--) {
int q, x;
f >> q >> x;
if (q == 0) {
g << CautareBinaraEqual_LAST(0, nr - 1, x) + 1 << "\n";
}
if (q == 1) {
g << CautareBinaraLessOrEqual_LAST(0, nr - 1, x) + 1 << "\n";
}
if (q == 2) {
g << CautareBinaraGreaterOrEqual_FIRST(0, nr - 1, x) + 1 << "\n";
}
}
return 0;
}