前言
你说得对, 但是利用率
思路
发现题目隐藏了区间互不相同这个条件, 神秘
烦死了, 但是先按照这个做
首先发现一档 \(r_i - l_i \leq 5\)
直接简单做就完了
然后对于 \(l_ir_i \leq n\) 的
发现等价于每个点只需要考虑 \(\sqrt{n}\) 个左端点对应的区间, 分开考虑即可, 讨论还是挺繁琐的, 这里不展开因为和正解关系不大
以上两个特殊性质都是对单点覆盖区间个数的约束
不难发现我们都可以把约束转化到点上即可
但是正解似乎和它没啥关系, 因为无论如何你也没办法处理单点覆盖区间个数很多的情况
考虑把问题划归到点上之后, 是否有和区间个数无关的方法

不难注意到, 我们统计的是拥有奇数个点的区间数量, 可以简单转化为拥有奇数个性质的区间个数
这个怎么统计呢?
发现连续性质的交集好计算, 我们要求的是并集, 考虑容斥
不妨设 \(f\big([l, r]\big)\) 表示「至少」 \([l, r]\) 中的性质的区间数量, \(g\big([l, r]\big)\) 表示「恰好」拥有 \([l, r]\) 中的性质的区间数量
容斥推导
虽然用了「至少」和「恰好」, 但是这跟二项式反演没有任何关系, 因为性质之间完全不相同
并且这显然不是一般的容斥了, 所以可能要类似反演去做
考虑最终我们要统计
1≤l≤r≤m∑[r−l+1mod2]×g([l,r])
注意到
f([l,r])=l′≤l,r′≥r∑g([l′,r′])
且 f 可以用扫描线计算
考虑反推 g
注意到
r′≥r∑g([l,r′])=f([l,r])−f([l−1,r])l′≤l∑g([l′,r])=f([l,r])−f([l,r+1])
因此不难发现反推不太可能
但是我们可以考虑对答案柿子直接处理, 不妨设 p([l,r])=∑r′≥rg([l,r′]),f(0,k)=0
==1≤l≤r≤m∑[r−l+1mod2]×g([l,r])1≤l≤m∑p([l,l])−p([l,l+1])+p([l,l+2])−p([l,l+3])+⋯1≤l≤m∑f([l,l])−f([l−1,l])−f([l,l+1])+f([l−1,l+1])+f([l,l+2])−f([l−1,l+2])−f([l,l+3])+f([l−1,l+3])+⋯
到这其实可以直接处理, 但是还可以进一步化简
考虑在固定的一个 l 中, 奇数长度的是 l 加 l−1 加, 偶数长度的是 l 减 l−1 减
考虑一个拆贡献, 关于 l 的柿子出现了多少次?
在 l 自己的枚举中, 所有 len 为奇数的 f([l,l+len−1]) 都出现了 +1 次; 所有 len 为偶数的 f([l,l+len−1]) 都出现了 −1 次
而在 l+1 的枚举中, 所有 len 为奇数的 f([l,l+len−1]) 都出现了 +1 次; 所有 len 为偶数的 f([l,l+len−1]) 都出现了 −1 次
合一下, 奇数 len 的 f([l,l+len−1]) 出现 +2 次, 偶数 len 的 f([l,l+len−1]) 出现 −2 次, 注意到所有 f([l,l]) 只出现 +1 次, 最终答案就是 f([l,l]) 之和减去 2 倍偶数区间加上 2 倍奇数区间
考虑 \(f\) 的计算
不难发现相当于统计 \(l_i \leq x, r_i \geq y\) 的区间个数, 显然是一个变式二维数点问题, 稍微转化一下即可离线快速处理
这时单 \(m\) 复杂度做到了 \(\mathcal{O} (m^2 \log n)\), 和 \(\mathcal{O} (m + n)\) 的暴力做法合一下做到 \(\mathcal{O} (n \sqrt{n \log n})\)
总结
灵活的更换贡献主体可以解决一些问题
容斥问题
- 容斥
- 容斥原理善于将交集转化为并集处理
- \(\rm{dp}\) 处理并集
- 二进制枚举处理并集
- 组合数计算并集
- 广义容斥原理\((\)计算指定大小的交集\()\)
- 常用推导方式
- 类广义容斥原理
- 定义一个易于计算的「至少」, 转化到要计算的「恰好」
- 不一定要反推, 可以直接带入答案柿子求解
根号分治往往要找一些与大小无关的, 合一下与个数无关的
关键在于注意到可以用扫描线无关区间个数统计出覆盖点区间的区间个数, 然后转化到答案
区间覆盖点问题, 往往转化到点对区间的影响
本题中首先发现覆盖点一定构成一个点区间, 然后发现可以尝试计算出所有点区间的覆盖区间个数, 发现不能直接算但是可以容斥就做完了
巧妙之处在于把每个点的处理转化到了点区间上, 从而获得了继承关系, 就不用每个点都算一遍所有区间了