Pagini recente » Cod sursa (job #729754) | Cod sursa (job #155687) | Cod sursa (job #88695) | Cod sursa (job #2090793) | Cod sursa (job #196567)
Cod sursa(job #196567)
// http://infoarena.ro/problema/cautbin
#include <fstream>
#include <vector>
using namespace std;
int n, m;
vector<int> A;
int binarySearch(int type, int what) {
int lo, hi, mid;
int Ans[3];
Ans[0] = Ans[1] = Ans[2] = -1;
for (lo = 0, hi = n - 1; lo <= hi; ) {
mid = lo + (hi - lo) / 2;
if (A[mid] < what) {
Ans[1] = mid;
lo = mid + 1;
} else if (A[mid] > what) {
Ans[2] = mid;
hi = mid - 1;
} else {
Ans[0] = Ans[1]= Ans[2] = mid;
break;
}
}
return Ans[type];
}
int main() {
ifstream in("cautbin.in");
ofstream out("cautbin.out");
in >> n;
A.reserve(n);
int i, e;
for (i = 0; i < n; ++ i) {
in >> e;
A.push_back(e);
}
int type, what, ans;
in >> m;
for (i = 0; i < m; ++ i) {
in >> type >> what;
ans = binarySearch(A, type, what);
if (ans == -1)
out << "-1\n";
else
out << ans + 1 << endl;
}
return 0;
}