Pagini recente » Cod sursa (job #2405362) | Cod sursa (job #1330811) | Cod sursa (job #557142) | Cod sursa (job #264808) | Cod sursa (job #1807408)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int binarySearch(vector<int> &vect, int target, int mission) {
int lo = 0, hi = vect.size(), mi = (lo + (hi - lo)) / 2;
while (lo < hi) {
if (vect[mi] == target) {
if (mission != 2) {
while (vect[mi + 1] == target) ++mi;
return mi + 1;
} else {
while (vect[mi - 1] == target) --mi;
return mi + 1;
}
} else if (vect[mi] < target) {
lo = mi;
mi = (lo + (hi - lo)) / 2;
} else {
hi = mi;
mi = (lo + (hi - lo)) / 2;
}
}
if (mission == 1) {
while (vect[mi] < target) ++mi;
return mi + 1;
}
if (mission == 2) {
while (vect[mi] > target) --mi;
return mi + 1;
}
return -1;
}
int main() {
ifstream fi("cautbin.in");
ofstream fo("cautbin.out");
vector<int> vect;
int n, x, noTasks;
vector<pair<int, int> > tasks;
fi >> n;
for (int i = 0; i < n; ++i) {
fi >> x;
vect.push_back(x);
}
fi >> noTasks;
for (int i = 0; i < noTasks; ++i) {
pair<int, int> aux;
fi >> aux.first;
fi >> aux.second;
tasks.push_back(aux);
}
for (int i = 0; i < noTasks; ++i) {
fo << binarySearch(vect, tasks[i].second, tasks[i].first) << endl;
}
fo.close();
fi.close();
return 0;
}