AcWing 789. 数的范围 ( JavaScript )
原题链接
简单
作者:
gaobowen
,
2019-11-12 11:18:16
,
所有人可见
,
阅读 759
let arr = []
//greater or equal to n; GE
let checkGE = n => i => arr[i] >= n;
//less or equal to n; LE
let checkLE = n => i => arr[i] <= n;
//查找check区间的左边界
let bsearchL = (l, r, checkMid) => {
while (l < r) {
let mid = parseInt((l + r) / 2)
//满足条件向左缩小
if (checkMid(mid)) r = mid;
//不满足向右
else l = mid + 1;
}
return l;
}
//查找check区间的右边界
let bsearchR = (l, r, checkMid) => {
while (l < r) {
let mid = parseInt((l + r + 1) / 2)
//满足条件向右缩小
if (checkMid(mid)) l = mid;
//不满足向左
else r = mid - 1;
}
return l;
}
let rangeOfNumber = (arr, n) => {
let i = bsearchL(0, arr.length - 1, checkGE(n));
let j = i;
if (arr[i] != n) return [-1, -1];
else {
j = bsearchR(0, arr.length - 1, checkLE(n));
}
return [i, j];
}
var buf = '';
process.stdin.on('readable', function () {
var chunk = process.stdin.read();
if (chunk) buf += chunk.toString();
});
let getInputArgs = line => {
return line.split(' ').filter(s => s !== '').map(x => parseInt(x));
}
process.stdin.on('end', function () {
let k = 1;
buf.split('\n').forEach(function (line, lineIdx) {
if (lineIdx === 0) {
k = getInputArgs(line)[1];
}
else if (lineIdx === 1) {
arr = getInputArgs(line);
}
else {
if (k > 0) {
let result = rangeOfNumber(arr, getInputArgs(line)[0]);
console.log(result[0], result[1]);
}
k--;
}
});
});