class RangeList {
constructor(){
this.cache_list=[]
}
add(params){
this.cache_list.push(params)
this.cache_list=this.calculate(this.cache_list)
}
remove(params){
let res=[]
for (let i = 0; i < this.cache_list.length; i++) {
if (this.cache_list[i][1] >= params[0] && params[1] >= this.cache_list[i][0]) {
if (this.cache_list[i][0] < params[0]) {
let list = [];
list.push(this.cache_list[i][0]);
list.push(params[0]);
res.push(list);
}
if (this.cache_list[i][1] > params[1]) {
let list = [];
list.push(params[1]);
list.push(this.cache_list[i][1]);
res.push(list);
}
} else {
let list = [];
list.push(this.cache_list[i][0]);
list.push(this.cache_list[i][1]);
res.push(list);
}
}
this.cache_list=res;
}
print(){
let str=''
for(let i=0;i<this.cache_list.length;i++){
str+=`[${this.cache_list[i][0]},${this.cache_list[i][1]}) `
}
return str
}
calculate(params) {
if (params.length <= 1) return params;
console.log(params)
params.sort((arr1, arr2) => {
if (arr1[0] !== arr2[0]) {
return arr1[0] - arr2[0];
} else {
return arr1[1] - arr2[1];
}
});
let ans = [params[0]];
let prev = params[0];
for (let i=1;i<params.length;i++) {
if (params[i][0] > prev[1]) {
ans.push(params[i]);
prev = params[i];
} else {
prev[1] = Math.max(prev[1], params[i][1]);
}
}
return ans;
};
}
let r1=new RangeList()
r1.add([1, 5])
// console.log(r1.print())
r1.add([10,20])
// console.log(r1.print())
r1.add([20,20])
// console.log(r1.print())
r1.add([20,21])
// console.log(r1.print())
r1.add([2,4])
// console.log(r1.print())
r1.add([3,8])
// console.log(r1.print())
r1.remove([10,10])
// console.log(r1.print())
r1.remove([10,11])
// console.log(r1.print())
r1.remove([15,17])
// console.log(r1.print())
r1.remove([3,19])
// console.log(r1.print())