说实话的确有点难想的说……
莫队 + bitset 倒是很好想到。
直接莫队 + bitset 只能求出交集的颜色种数而不能直接求交集大小。
考虑同颜色集合的交集,即两者大小中的较小值。
再考虑如何在 bitset 上体现较小值。
也即用集合操作体现较小值。
对于两个数 a,b,构造两个集合 A={x∣x∈Z,1≤x≤a} 和 B={x∣x∈Z,1≤x≤b}。
则显然 |A⋂B|=min(a,b)。
在此题中,每种颜色 x 在 bitset 中占据的位置为 [x,x+cntx),其中 cntx 表示颜色 x 的出现次数。
这样子就可以了。
还有一个问题就是 bitset 的空间问题。
把询问分三组,每组做一次莫队就行了。
常数极大。
(毕竟是 bitset 科技)
代码:
1 |
|