Pagini recente » Cod sursa (job #1522938) | Cod sursa (job #2928639) | Cod sursa (job #701660) | Cod sursa (job #2393200) | Cod sursa (job #1807804)
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int cautare_binara_01(int v[], int n, int x) {
int mid, found = 0;
int st = 1;
int dr = n;
while (st <= dr && !found) {
mid = (st + dr) / 2;
if (x == v[mid]) {
if (x == v[mid + 1])
st = mid + 1;
else
return mid;
}
else
if (x < v[mid])
dr = mid - 1;
else
st = mid + 1;
}
}
int cautare_binara_02(int v[], int n, int x) {
int mid, found = 0;
int st = 1;
int dr = n;
while (x > v[dr])
x--;
while (st <= dr && !found) {
mid = (st + dr) / 2;
if (x == v[mid]) {
if (x == v[mid + 1])
st = mid + 1;
else
return mid;
}
else
if (x < v[mid])
dr = mid - 1;
else
st = mid + 1;
}
}
int cautare_binara_03(int v[], int n, int x) {
int mid, found = 0;
int st = 1;
int dr = n;
if (x < v[st])
x++;
while (st <= dr && !found) {
mid = (st + dr) / 2;
if (x == v[mid]) {
if (x == v[mid - 1])
dr = mid - 1;
else
return mid;
}
else
if (x < v[mid])
dr = mid - 1;
else
st = mid + 1;
}
}
int N, a, x;
int qType, nQ;
int v[100010];
int main()
{
fin >> N;
for (int i = 1; i <= N; i++) {
fin >> a;
v[i] = a;
}
fin >> nQ;
for (int i = 1; i <= nQ; i++) {
fin >> qType >> x;
switch (qType) {
case 0:
fout << cautare_binara_01(v, N, x) << '\n';
break;
case 1:
fout << cautare_binara_02(v, N, x) << '\n';
break;
case 2:
fout << cautare_binara_03(v, N, x) << '\n';
break;
}
}
return 0;
}