Pagini recente » Cod sursa (job #2673851) | Cod sursa (job #3256402) | Cod sursa (job #17956) | Cod sursa (job #2843268) | Cod sursa (job #2801534)
#include <fstream>
using namespace std;
ifstream cin("cautbin.in");
ofstream cout("cautbin.out");
int cautareBinara0(int a, int v[], int n) {
int lo = 1, hi = n;
int sol = -1;
while (lo <= hi) {
int mid = lo + (hi - lo) / 2;
if (v[mid] == a) {
sol = mid;
}
if (v[mid] <= a) {
lo = mid + 1;
}
if (v[mid] > a) {
hi = mid - 1;
}
}
return sol;
}
int cautareBinara1(int a, int v[], int n) {
int sol = -1;
for (int i = a; i > 0; --i) {
int lo = 1, hi = n;
while (lo <= hi) {
int mid = lo + (hi - lo) / 2;
if (v[mid] == a) {
sol = mid;
}
if (v[mid] <= a) {
lo = mid + 1;
}
if (v[mid] > a) {
hi = mid - 1;
}
}
if (sol != -1)
return sol;
}
return sol;
}
int cautareBinara2(int a, int v[], int n) {
int lo = 1, hi = n;
int sol = -1;
int max = 1;
for (int i = 1; i <= n; ++i) {
if (max < v[i])
max = v[i];
}
for (int i = a; i <= max; ++i) {
while (lo <= hi) {
int mid = lo + (hi - lo) / 2;
if (v[mid] == a) {
sol = mid;
}
if (v[mid] < a) {
lo = mid + 1;
}
if (v[mid] >= a) {
hi = mid - 1;
}
}
if (sol != -1)
return sol;
}
return sol;
}
int v[100001], n, m;
int main() {
cin >> n;
for (int i = 1; i <= n; ++i)
cin >> v[i];
cin >> m;
int x, z;
for (int i = 1; i <= m; ++i) {
cin >> x >> z;
if (x == 0)
cout << cautareBinara0(z, v, n) << "\n";
else if (x == 1)
cout << cautareBinara1(z, v, n) << "\n";
else if (x == 2)
cout << cautareBinara2(z, v, n) << "\n";
}
return 0;
}