Pagini recente » Rating Adrian Bogdan Marin (bogdanmarin) | Cod sursa (job #2085405) | Profil Vasile_Catana | Rating Butnari Nicolae (Jack_Nick) | Cod sursa (job #3255853)
#include <fstream>
using namespace std;
ifstream cin ("cautbin.in");
ofstream cout ("cautbin.out");
int caut_bin_0 (int n, int v[], int x) {
int poz = -1, st = 1, dr = n;
while (st <= dr) {
int mij = st + (dr - st) / 2;
if (v[mij] == x) {
poz = mij;
st = mij + 1;
}
else {
if (v[mij] > x)
dr = mij - 1;
else
st = mij + 1;
}
}
return poz;
}
int caut_bin_1 (int n, int v[], int x) {
int poz = 0, st = 1, dr = n;
while (st <= dr) {
int mij = st + (dr - st) / 2;
if (v[mij] > x) {
poz = mij;
dr = mij - 1;
}
else
st = mij + 1;
}
return poz - 1;
}
int caut_bin_2 (int n, int v[], int x) {
int poz = 0, st = 1, dr = n;
while (st <= dr) {
int mij = st + (dr - st) / 2;
if (v[mij] < x) {
poz = mij;
st = mij + 1;
}
else
dr = mij - 1;
}
return poz + 1;
}
int main () {
int n, m, v[100001];
cin >> n;
for (int i = 1; i <= n; ++i)
cin >> v[i];
cin >> m;
while (m--) {
int cerinta, x;
cin >> cerinta >> x;
switch (cerinta) {
case 0: cout << caut_bin_0 (n, v, x) << '\n';
break;
case 1: cout << caut_bin_1 (n, v, x) << '\n';
break;
case 2: cout << caut_bin_2 (n, v, x) << '\n';
break;
}
}
return 0;
}