Pagini recente » Cod sursa (job #3241735) | Cod sursa (job #3217610) | Cod sursa (job #3237636) | Cod sursa (job #1137510) | Cod sursa (job #811826)
Cod sursa(job #811826)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin ("cautbin.in");
ofstream fout ("cautbin.out");
int N, M;
vector <int> V;
void read() {
fin >> N;
for(int i = 0; i < N; i++) {
int x;
fin >> x;
V.push_back(x);
}
}
// A[lo] <= val < A[hi]
int cbin1(int type, int val) {
int lo = -1, hi = N;
while (hi - lo > 1) {
int mid = (hi + lo) / 2;
if (V[mid] <= val) {
lo = mid;
} else {
hi = mid;
}
}
if (type == 0 && V[lo] != val) {
return -1;
}
return lo + 1;
}
// A[lo] < val <= A[hi]
int cbin2(int type, int val) {
int lo = -1, hi = N;
while (hi - lo > 1) {
int mid = (hi + lo) / 2;
if (val <= V[mid]) {
hi = mid;
} else {
lo = mid;
}
}
return hi + 1;
}
int main() {
read();
fin >> M;
while (M--) {
int type, val;
fin >> type >> val;
if (type == 0 || type == 1) {
fout << cbin1(type, val) << "\n";
} else {
fout << cbin2(type, val) << "\n";
}
}
return 0;
}