Cod sursa(job #2079403)
Utilizator | Data | 1 decembrie 2017 12:14:13 | |
---|---|---|---|
Problema | Cautare binara | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.52 kb |
#include <iostream>
#include <fstream>
using namespace std;
const int MAXN = 100001;
int n, a[MAXN];
int main(int argc, const char * argv[]) {
ifstream cin("cautbin.in");
//ofstream cout("cautbin.out");
cin >> n;
for (int i = 1; i <= n; ++i) {
cin >> a[i];
}
int m;
cin >> m;
while (m--) {
int op, x;
cin >> op >> x;
int pas = 1 << 16;
int r = 0;
switch (op) {
case 0:
while (pas > 0) {
if (r + pas <= n && a[r + pas] <= x) {
r += pas;
}
pas >>= 1;
}
if (a[r + pas] == x) {
cout << r;
} else {
cout << -1;
}
break;
case 1:
while (pas > 0) {
if (r + pas <= n && a[r + pas] <= x) {
r += pas;
}
pas >>= 1;
}
cout << r;
break;
case 2:
while (pas > 0) {
if (r + pas <= n && a[r + pas] < x) {
r += pas;
}
pas >>= 1;
}
cout << r + 1;
break;
}
cout << '\n';
}
return 0;
}