跳到主要内容

2276.统计区间中的整数数目

链接:2276.统计区间中的整数数目
难度:Hard
标签:设计、线段树、有序集合
简介:给你区间的 空 集,请你设计并实现满足要求的数据结构:新增:添加一个区间到这个区间集合中。统计:计算出现在 至少一个 区间中的整数个数。

题解 1 - cpp

  • 编辑时间:2023-12-16
  • 执行用时:432ms
  • 内存消耗:181.94MB
  • 编程语言:cpp
  • 解法介绍:平衡二叉树。
class CountIntervals {
public:
map<int, int> tree;
int sum;
CountIntervals(): sum(0) {
tree[0] = 0;
tree[INT_MAX] = INT_MAX;
}
int count() {
return sum;
}
void add(int left, int right) {
auto it = tree.lower_bound(left);
auto prev = it;
prev--;
if (prev->second >= left) {
left = min(left, prev->first);
right = max(right, prev->second);
sum -= prev->second - prev->first + 1;
it = tree.erase(prev);
}
while (right >= it->first) {
right = max(right, it->second);
sum -= it->second - it->first + 1;
it = tree.erase(it);
}
tree[left] = right;
sum += right - left + 1;
}
};