Pagini recente » Cod sursa (job #2871439) | Cod sursa (job #2872780) | Cod sursa (job #1611127) | Cod sursa (job #2942773) | Cod sursa (job #2673756)
#include <fstream>
const int nmax = 1e5 + 5;
int n, q, v[nmax], op, x;
int bs0(int x) {
int st = 0, dr = n - 1, ans = -2;
while (st <= dr) {
int mij = (st + dr) / 2;
if (v[mij] > x) dr = mij - 1;
else {
st = mij + 1;
if (v[mij] == x) ans = mij;
}
}
return ans + 1;
}
int bs1(int x) {
int st = 0, dr = n - 1, ans;
while (st <= dr) {
int mij = (st + dr) / 2;
if (v[mij] > x) dr = mij - 1;
else st = mij + 1, ans = mij;
}
return ans + 1;
}
int bs2(int x) {
int st = 0, dr = n - 1, ans;
while (st <= dr) {
int mij = (st + dr) / 2;
if (v[mij] < x) st = mij + 1;
else dr = mij - 1, ans = mij;
}
return ans + 1;
}
int main() {
std::ifstream fin("cautbin.in");
std::ofstream fout("cautbin.out");
fin >> n;
for (int i = 0; i < n; i++) fin >> v[i];
fin >> q;
while (q--) {
fin >> op >> x;
if(op==0) fout << bs0(x) << "\n";
if(op==1) fout << bs1(x) << "\n";
if(op==2) fout << bs2(x) << "\n";
}
}