Pagini recente » Cod sursa (job #2375378) | Cod sursa (job #258478) | Cod sursa (job #1148254) | Cod sursa (job #3205463) | Cod sursa (job #833723)
Cod sursa(job #833723)
#include <fstream>
using namespace std;
ifstream in("cautbin.in");
ofstream out("cautbin.out");
int n, v[100000];
int last_le(int x) {
int l = -1, r = n-1; // l excl; r incl
int m;
while (l < r) {
m = l + (r - l + 1) / 2;
if (v[m] <= x)
l = m;
else
r = m - 1;
}
return l; /* == r_i */
}
int first_ge(int x) {
int l = 0, r = n; // l incl; r excl
int m;
while (l < r) {
m = l + (r - l) / 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<<endl; break;
case 1: out<<last_le(x) + 1<<endl; break;
case 2: out<<first_ge(x) + 1<<endl; break;
}
}
return 0;
}