- 本人的LeetCode账号:Router,欢迎关注获取每日一题题解,快来一起刷题呀~
- 本人Github账号:Grotherdieck,欢迎
f
o
l
l
o
w
follow
follow获取博客内容源码。
文章目录- 一、思想
- 二、模板题
我们希望提供一种数据结构,能够在线的维护由整数组成的闭区间的并集,并且获得维护的闭区间中的整数个数。
珂朵莉树的思想可以很好的解决这个问题,至于为啥叫珂朵莉树,是因为codeforces上最早的这类型问题的最优解法的贡献者顶着一个珂朵莉的头像。
它的主要思想是通过有序集合set来维护这些区间,set
class CountIntervals {
public:
CountIntervals() {}
void add(int left, int right)
{
int l = left, r = right;
auto it = tree.lower_bound({l - 1, -2e9});
while (it != tree.end())
{
if (it->second > r + 1) break;
l = min(l, it->second);
r = max(r, it->first);
cnt -= it->first - it->second + 1;
it = tree.erase(it);
}
cnt += r - l + 1;
tree.insert({r, l});
}
int count()
{
return cnt;
}
private:
typedef pair pii;
set tree;
int cnt = 0;
};



