Pagini recente » Cod sursa (job #592747) | Cod sursa (job #729305) | Cod sursa (job #2668689) | Cod sursa (job #507026) | Cod sursa (job #2739310)
#include <iostream>
#include <fstream>
int ret0 = -1;
int BinarySearch0(unsigned long* V, int l, int r, unsigned long num) {
if (l > r)
return -1;
int mid = (l + r) / 2;
if (V[mid] > num)
return BinarySearch0(V, l, mid - 1, num);
else if (V[mid] < num)
return BinarySearch0(V, mid + 1, r, num);
ret0 = mid;
return BinarySearch0(V, mid + 1, r, num);
}
int ret1;
int BinarySearch1(unsigned long* V, int l, int r, unsigned long num) {
if (l > r)
return -1;
int mid = (l + r) / 2;
if (V[mid] > num)
return BinarySearch1(V, l, mid - 1, num);
ret1 = mid;
return BinarySearch1(V, mid + 1, r, num);
}
int ret2;
int BinarySearch2(unsigned long* V, int l, int r, unsigned long num) {
if (l > r)
return -1;
int mid = (l + r) / 2;
if (V[mid] < num)
return BinarySearch2(V, mid + 1, r, num);
ret2 = mid;
return BinarySearch2(V, l, mid - 1, num);
}
unsigned long V[100000];
int main() {
std::ifstream fin("cautbin.in");
std::ofstream fout("cautbin.out");
int N;
fin >> N;
int i;
for (i = 0; i < N; ++i)
fin >> V[i];
int M;
fin >> M;
int p;
unsigned long x;
for (i = 0; i < M; ++i) {
fin >> p >> x;
if (p == 0) {
BinarySearch0(V, 0, N - 1, x);
if (ret0 == -1)
fout << -1 << '\n';
else
fout << ret0 + 1 << '\n';
} else if (p == 1) {
BinarySearch1(V, 0, N - 1, x);
fout << ret1 + 1 << '\n';
} else if (p == 2) {
BinarySearch2(V, 0, N - 1, x);
fout << ret2 + 1 << '\n';
}
}
fin.close();
fout.close();
return 0;
}