Pagini recente » Cod sursa (job #3262503) | Cod sursa (job #3287821) | Cod sursa (job #290162) | Cod sursa (job #3188829) | Cod sursa (job #2385667)
#include <iostream>
#include <fstream>
#include <vector>
int binSearchRightToLeft(const std::vector<int>& vals, const int x)
{
int left = -1, right = vals.size()-1;
while (right - left > 1) {
int mid = (left + right) / 2;
if (vals[mid] >= x) {
right = mid;
} else {
left = mid;
}
}
return right;
}
int binSearchLeftToRight(const std::vector<int>& vals, const int x)
{
int left = 0, right = vals.size();
while (right - left > 1) {
int mid = (left + right) / 2;
if (vals[mid] <= x) {
left = mid;
} else {
right = mid;
}
}
return left;
}
int main (int argc, char const *argv[])
{
/* code */
std::ifstream in("cautbin.in");
std::ofstream out("cautbin.out");
int N;
in >> N;
std::vector<int> val(N);
for (int i = 0; i < N; ++ i) {
int x;
in >> x;
val[i] = x;
}
int M;
in >> M;
for (int i = 0; i < M; ++ i) {
int t, v;
in >> t >> v;
int fnd = -1;
if (t == 2)
fnd = binSearchRightToLeft(val, v);
else
fnd = binSearchLeftToRight(val, v);
if (t == 0 && val[fnd] != v) {
fnd = -2;
}
out << fnd+1 << "\n";
}
out.close();
in.close();
return 0;
}