Pagini recente » Cod sursa (job #1144994) | Cod sursa (job #2225242) | Cod sursa (job #19706) | Cod sursa (job #290372) | Cod sursa (job #2770849)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int N, M;
vector<int>v;
int bs(int x) {
int st = 1, dr = N, mid, ret = -1;
while(st <= dr) {
mid = (st + dr) >> 1;
if(v[mid] < x) {
st = mid + 1;
} else if(v[mid] > x) {
dr = mid - 1;
} else {
st = mid + 1;
ret = mid;
}
}
return ret;
}
int lbd(int x) {
int st = 1, dr = N, mid, ret;
while(st <= dr) {
mid = (st + dr) >> 1;
if(v[mid] <= x) {
st = mid + 1;
ret = mid;
} else {
dr = mid - 1;
}
}
return ret;
}
int ubd(int x) {
int st = 1, dr = N, mid, ret;
while(st <= dr) {
mid = (st + dr) >> 1;
if(v[mid] < x) {
st = mid + 1;
} else {
dr = mid - 1;
ret = mid;
}
}
return ret;
}
int main() {
fin >> N;
v = vector<int>(N + 1);
for(int i = 1; i <= N; i++) {
fin >> v[i];
}
fin >> M;
for(int i = 1, q, x; i <= M; i++) {
fin >> q >> x;
if(q == 0) {
fout << bs(x) << '\n';
} else if(q == 1) {
fout << lbd(x) << '\n';
} else {
fout << ubd(x) << '\n';
}
}
return 0;
}