Pagini recente » Cod sursa (job #3273477) | Cod sursa (job #2771548) | Cod sursa (job #3250215) | Cod sursa (job #682948)
Cod sursa(job #682948)
#include <fstream>
using namespace std;
const int MAX_N = 100005;
int N, M;
int A[MAX_N];
ifstream fin ("cautbin.in");
ofstream fout ("cautbin.out");
void read() {
fin >> N;
for (int i = 0; i < N; ++i) {
fin >> A[i];
}
}
int binary_search1(int A[MAX_N], int N, int val) {
int lo = -1, hi = N;
while (hi - lo > 1) {
int mid = (hi + lo) / 2;
if (A[mid] <= val) {
lo = mid;
} else {
hi = mid;
}
}
return lo;
}
int binary_search2(int A[MAX_N], int N, int val) {
int lo = -1, hi = N;
while (hi - lo > 1) {
int mid = (hi + lo) / 2;
if (A[mid] < val) {
lo = mid;
} else {
hi = mid;
}
}
return hi;
}
void solve() {
fin >> M;
for (int i = 0; i < M; i++) {
int type, val;
fin >> type >> val;
int pos = -1;
if (type == 1 || type == 0) {
pos = binary_search1(A, N, val);
} else {
pos = binary_search2(A, N, val);
}
if (type == 0 && A[pos] != val){
fout << "-1\n";
} else {
fout << pos + 1 << "\n";
}
}
}
int main() {
read();
solve();
return 0;
}