Pagini recente » Cod sursa (job #2034024) | Cod sursa (job #1012443) | Cod sursa (job #675725) | Cod sursa (job #1997881) | Cod sursa (job #833728)
Cod sursa(job #833728)
#include <fstream>
using namespace std;
ifstream in("cautbin.in");
ofstream out("cautbin.out");
int n, v[100000], m, l, r;
static inline int last_le(int x) {
l = -1, r = n-1; // l excl; r incl
while (l < r) {
m = (l + r + 1) / 2;
if (v[m] <= x)
l = m;
else
r = m - 1;
}
return l; /* == r_i */
}
static inline int first_ge(int x) {
l = 0, r = n; // l incl; r excl
while (l < r) {
m = (l - r) / 2;
if (v[m] < x)
l = m + 1;
else
r = m;
}
return l; /* == r */
}
int main() {
int i, tmp, op, x, m;
in>>n;
for (i = 0; i < n; ++i)
in>>v[i];
in>>m;
for (i = 0; i < m; ++i) {
in>>op>>x;
switch (op) {
case 0: tmp = last_le(x);
out<<(tmp >= 0 ? (v[tmp] == x ? tmp : -2) : -2) + 1<<"\n"; break;
case 1: out<<last_le(x) + 1<<"\n"; break;
case 2: out<<first_ge(x) + 1<<"\n"; break;
}
}
return 0;
}