Pagini recente » Cod sursa (job #3263060) | Cod sursa (job #1346428) | Cod sursa (job #716455) | Cod sursa (job #857286) | Cod sursa (job #2550225)
#include <fstream>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int n, T, v[100005], i, q, nr;
int cb0(int x) {
int st = 1, dr = n, m;
while(st <= dr) {
m = (st + dr) / 2;
if(v[m] == x)
return m;
else if(v[m] > x)
dr = m-1;
else
st = m+1;
}
return -1;
}
int cb1(int x) {
int st = 1, dr = n, m, sol = -1;
while(st <= dr) {
m = (st + dr) / 2;
if(v[m] <= x) {
sol = m;
st = m+1;
}
else if(v[m] > x)
dr = m-1;
else
st = m+1;
}
return sol;
}
int cb2(int x) {
int st = 1, dr = n, m, sol = -1;
while(st <= dr) {
m = (st + dr) / 2;
if(v[m] >= x) {
sol = m;
dr = m-1;
}
else if(v[m] > x)
dr = m-1;
else
st = m+1;
}
return sol;
}
int main() {
fin >> n;
for(int i = 1; i <= n; ++i)
fin >> v[i];
fin >> T;
for(int t = 1; t <= T; ++t) {
fin >> q >> nr;
if(q == 0) {
int p = cb0(nr);
while(v[p] == v[p+1] && p > 0 && p <= n)
p++;
fout << p << '\n';
}
else if(q == 1)
fout << cb1(nr) << '\n';
else if(q == 2)
fout << cb2(nr) << '\n';
}
}