Pagini recente » Cod sursa (job #7126) | Cod sursa (job #85194) | Cod sursa (job #3252822) | Cod sursa (job #843737) | Cod sursa (job #2203501)
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int n, m;
int a[100001];
void citesteDate() {
fin >> n;
for (int i = 1; i <= n; ++i)
fin >> a[i];
}
int cautareBinara01(int op, int val) {
int st = 1, dr = n;
int mid, raspuns = -1;
while (st <= dr) { // cat timp intervalul de lucru NU E VID
mid = (st + dr) / 2;
// st .... mid .... dr
if (a[mid] <= val) {
raspuns = mid;
// trec in intervalul [mid + 1, dr]
st = mid + 1;
}
else
dr = mid - 1; // trec in intervalul [st, mid - 1]
}
if (op == 0 && a[raspuns] != val)
return -1;
else
return raspuns;
}
int cautareBinara2(int val) {
int st = 1, dr = n;
int mid, raspuns = -1;
while (st <= dr) {
mid = (st + dr) / 2;
if (a[mid] >= val) {
raspuns = mid;
dr = mid - 1;
}
else
st = mid + 1;
}
return raspuns;
}
void rezolvaIntrebari() {
fin >> m;
int op, val;
while (m--) {
fin >> op >> val;
if (op <= 1)
fout << cautareBinara01(op, val) << '\n';
else
fout << cautareBinara2(val) << '\n';
}
}
int main()
{
citesteDate();
rezolvaIntrebari();
return 0;
}