1
var RangeModule = function () {7
* @param {number} right11
RangeModule.prototype.addRange = function (left, right) {12
const lIdx = this.findIndex(left),13
rIdx = this.findIndex(-right);14
if (lIdx === this.ranges.length) {15
this.ranges.push(left);16
this.ranges.push(-right);18
this.ranges[lIdx] < 0 &&19
(this.ranges[rIdx] > 0 || rIdx === this.ranges.length)21
this.ranges.splice(lIdx, rIdx - lIdx, -right);22
} else if (this.ranges[lIdx] < 0 && this.ranges[rIdx] < 0) {23
this.ranges.splice(lIdx, rIdx - lIdx);25
this.ranges[lIdx] > 0 &&26
(this.ranges[rIdx] > 0 || rIdx === this.ranges.length)28
this.ranges.splice(lIdx, rIdx - lIdx, left, -right);29
} else if (this.ranges[lIdx] > 0 && this.ranges[rIdx] < 0) {30
this.ranges.splice(lIdx, rIdx - lIdx, left);36
* @param {number} left37
* @param {number} right41
RangeModule.prototype.queryRange = function (left, right) {42
const lIdx = this.findIndex(left),43
rIdx = this.findIndex(-right);44
if (lIdx === this.ranges.length) return false;45
if (lIdx + 2 < rIdx) return false;47
return this.ranges[lIdx] < 0;48
} else if (lIdx + 1 === rIdx) {49
return this.ranges[lIdx] === left || this.ranges[lIdx] === -right;53
this.ranges[lIdx] === left && Math.abs(this.ranges[lIdx + 1]) === right59
* @param {number} left60
* @param {number} right64
RangeModule.prototype.removeRange = function (left, right) {65
let lIdx = this.findIndex(left),66
rIdx = this.findIndex(-right);67
if (lIdx === this.ranges.length) return null;69
this.ranges[lIdx] < 0 &&70
(this.ranges[rIdx] > 0 || rIdx === this.ranges.length)72
this.ranges.splice(lIdx, rIdx - lIdx, -left);73
} else if (this.ranges[lIdx] < 0 && this.ranges[rIdx] < 0) {74
this.ranges.splice(lIdx, rIdx - lIdx, -left, right);76
this.ranges[lIdx] > 0 &&77
(this.ranges[rIdx] > 0 || rIdx === this.ranges.length)79
this.ranges.splice(lIdx, rIdx - lIdx);80
} else if (this.ranges[lIdx] > 0 && this.ranges[rIdx] < 0) {81
this.ranges.splice(lIdx, rIdx - lIdx, right);83
// console.log(this.ranges)87
RangeModule.prototype.findIndex = function (number) {89
r = this.ranges.length;91
const m = l + ((r - l) >> 1);92
if (Math.abs(this.ranges[m]) > Math.abs(number)) {94
} else if (Math.abs(this.ranges[m]) < Math.abs(number)) {108
* Your RangeModule object will be instantiated and called as such:109
* var obj = new RangeModule()110
* obj.addRange(left,right)111
* var param_2 = obj.queryRange(left,right)112
* obj.removeRange(left,right)