Pagini recente » Cod sursa (job #3149113) | Cod sursa (job #1290199) | Cod sursa (job #2143979) | Cod sursa (job #982158) | Cod sursa (job #833733)
Cod sursa(job #833733)
#include <fstream>
using namespace std;
ifstream in("cautbin.in");
ofstream out("cautbin.out");
int n, v[100000], m, l, r;
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 */
}
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, mm;
in>>n;
for (i = 0; i < n; ++i)
in>>v[i];
in>>mm;
for (i = 0; i < mm; ++i) {
in>>op>>x;
switch (op) {
case 0: tmp = last_le(x);
out<<(tmp >= 0 ? (v[tmp] == x ? tmp + 1 : -1) : -1)<<"\n"; break;
case 1: out<<last_le(x) + 1<<"\n"; break;
case 2: out<<first_ge(x) + 1<<"\n"; break;
}
}
return 0;
}