震惊!我妻由乃掉进了兔子洞里…
传送门
题解
这题再YNOI里应该算简单的吧,毕竟代码挺短的。
根据题意,要求的答案就是三个区间的长度和减去三个区间的交集长度的三倍。
因为要求交集,自然而然想到用bitset。只要上莫队求出每个询问的三个区间的bitset,求交集即可。
但是这个交集还不是那么好求,要拐个弯QwQ。
先对原序列进行离散化,定义离散化之后的$A_i$表示原序列中有多少个数小于原$A_i$。
然后考虑一个区间,现在加入一个元素,怎么维护bitset。由于存在相同元素,所以bitset上可能有好多位都是留给与当前元素相同的元素的,那么就需要从第$A_i$个位置从左往右找到第一个空位把新元素按上去,这样进行&运算的时候就没有问题了,找位置的时候事先记一下当前区间每个值已经出现多少次了,就能O(1)找到。
这样进行&运算就没有什么问题了。
还有就是由于直接开$10^5$个长度为$10^5$的bitset会MLE,所以把所有询问分三次处理就好了。
感觉莫队+bitset的题常数都不小,蒟蒻我一般不吸氧过不了QwQ。
代码
1 |
|