首先,题目给出的式子中(x)的范围可以缩小到([1, n])。
然后这个式子是4元的,感觉很不好写。注意到范围再2D平面中是个矩形,试着搞下矩形容斥,即把一个询问拆成4个询问,拆分后的询问只有2元。具体如下:
[egin{aligned}
operatorname{Ans} &= Q_1 - Q_2 - Q_3 + Q_4\
Q_1 &= sum_{x = 1}^{n} get(1, r_1, x) imes get(1, r_2, x)\
Q_2 &= sum_{x = 1}^{n} get(1, l_1 - 1, x) imes get(1, r_2, x)\
Q_3 &= sum_{x = 1}^{n} get(1, r_1, x) imes get(1, l_2 - 1, x)\
Q_4 &= sum_{x = 1}^{n} get(1, l_1 - 1, x) imes get(1, l_2 - 1, x)\
end{aligned}
]
现在就可以直接莫队搞。
注意:我写代码的时候偷懒直接抠莫队板子了,结果一直跑不过样例。其实这题和一般莫队不一样。一般莫队维护的是一个区间([l, r]),而这一题莫队维护的是两个区间([1, l])和([1, r])。对于添加和删除操作,一般莫队操作左端点和右端点的逻辑是相反的,而这题是一致的。