class RangeModule {
private:
map<int,int> mp;
public:
RangeModule() {
}
void addRange(int left, int right) {
int l = left, r = right;
auto p = mp.lower_bound(left);
while(p != mp.end() && p -> second <= right)
{
l = min(l,p->second);
r = max(r,p->first);
auto temp = p;
p++;
mp.erase(temp->first);
}
mp[r] = l;
}
bool queryRange(int left, int right) {
auto p = mp.lower_bound(left);
if(p == mp.end())
return false;
if(p -> second <= left && p -> first >= right)
return true;
return false;
}
void removeRange(int left, int right) {
auto p = mp.lower_bound(left + 1);
while(p != mp.end() && p -> second <= right)
{
if(p -> second < left){
mp[left] = p -> second;
}
if(p -> first > right){
mp[p->first] = right;
break;
}
else {
auto temp = p;
p++;
mp.erase(temp->first);
}
}
}
};
/**
* Your RangeModule object will be instantiated and called as such:
* RangeModule* obj = new RangeModule();
* obj->addRange(left,right);
* bool param_2 = obj->queryRange(left,right);
* obj->removeRange(left,right);
*/
leetcode 715. Range 模块 (hard)
最新推荐文章于 2024-09-26 10:11:15 发布
该博客介绍了一个用于区间管理的C++类`RangeModule`,它提供了添加、查询和删除区间的功能。类内部使用了一个映射数据结构来高效地存储和操作区间,通过迭代并更新区间边界来处理重叠。`addRange`方法合并了重叠区间,`queryRange`检查给定区间是否完全被已存储的区间覆盖,`removeRange`则移除指定的区间。此实现对于区间操作密集型的应用场景非常有用。
摘要由CSDN通过智能技术生成