Pagini recente » Cod sursa (job #1268074) | Cod sursa (job #2082398) | Cod sursa (job #2733153) | Cod sursa (job #1231122) | Cod sursa (job #2150548)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("cautbin.in");
ofstream out("cautbin.out");
const int L = 1 << 16;
const int MAXN = 100002;
int n, m;
int v[MAXN], rv[MAXN];
int cautare_binara(int val) {
int step = L;
int p = 0;
while (step != 0) {
int leap = p + step;
if (leap <= n && v[leap] <= val) {
p = leap;
}
step >>= 1;
}
return p;
}
int r_cautare_binara(int val) {
int step = L;
int p = 0;
while (step != 0) {
int leap = p + step;
if (leap <= n && rv[leap] >= val) {
p = leap;
}
step >>= 1;
}
return p;
}
int main()
{
in >> n;
for (int i = 1; i <= n; ++i) {
in >> v[i];
rv[n - i + 1] = v[i];
}
in >> m;
for (int i = 1, o, x; i <= m; ++i) {
in >> o >> x;
if (o == 0) {
int p = cautare_binara(x);
if (v[p] == x) out << p << "\n";
else out << -1 << "\n";
} else if (o == 1) {
int p = cautare_binara(x);
out << p << "\n";
} else if (o == 2) {
int p = r_cautare_binara(x);
out << n - p + 1 << "\n";
}
}
return 0;
}