[unknown source] 蔬菜

一、题目

[unknown source] 蔬菜
[unknown source] 蔬菜

二、解法

根据部分分的提示,我们可以预处理一个二维前缀和拿到 s u b t a s k 4 \tt subtask4 subtask4 的分数。

如果上述算法在某种蔬菜的出现次数较多,他的效率就比较高。那对于出现次数少的蔬菜呢?最好是无关蔬菜种类地统计,这指向了我们需要用算贡献的方法来处理这种蔬菜。

用点对贡献的方式,因为平方其实相当于求点对的数量。对于一种蔬菜我们任取两个点加入坐标 ( a , b , c , d ) (a,b,c,d) (a,b,c,d),那么它对询问 ( x 0 , y 0 , x 1 , y 1 ) (x_0,y_0,x_1,y_1) (x0,y0,x1,y1)产生贡献当且仅当:
x 0 ≤ a , c ≤ x 1 , y 0 ≤ b , d ≤ y 1 x_0\leq a,c\leq x_1,y_0\leq b,d\leq y_1 x0a,cx1,y0b,dy1显然可以通过排序去掉一维的比较,那么剩下的三维写个三维树状数组统计即可,常数小,时间复杂度 O ( ( n 2 k + q ) log ⁡ 3 k ) O((n^2k+q)\log ^3k) O((n2k+q)log3k),第一种的时间复杂度 O ( n 2 k ( n 2 + q ) ) O(\frac{n^2}{k}(n^2+q)) O(kn2(n2+q))

所以 k = n 2 + q log ⁡ 3 k k=\sqrt\frac{n^2+q}{\log^3 k} k=log3kn2+q