夜空是否全然知晓?
高维前缀和/sosdp
计算高维前缀和可以不用容斥,而是对每一维分别做前缀和,复杂度为 ,其中 是维度。
对于子集求和问题,相当于二进制下的 可以选 或 , 只能选 ,类似于一个高维的前缀和问题。
那么就可以在 的复杂度之内求出类似于子集和的问题。
题目
ARC100E Or Plus Max
是 的必要条件,是 的充分条件。
先算出 的答案,在求个前缀最小值就算出了 的答案,然后也满足了充要。
然后就是求子集最大值和次大值,高维前缀和解决。
CF1208F Bits And Pieces
考虑枚举一个 ,然后 。
要使得 更大,从高位到低位贪心的看能不能是 。
假设当前选择的为 ,首先 ,然后存在 使得 并且 。
相当于求一个超集的最大值和次大值,这种类似子集和的问题可以用高维前缀和解决。
P6442 [COCI2011-2012#6] KOŠARE
设选择的集合为 , 为 的个数,那么集合 的个数为 。
可以用高维前缀和算,然后按照 的个数容斥就行了。
也可以再跑一遍差分。
CF449D Jzzhu and Numbers
和上一道类似,不过不是跑子集是跑超集。
然后跑容斥或者差分。