学习链接
OI Wiki
UntilDawn知乎
BZOJ1935 园丁的烦恼
思路
对于每个查询查分成四个分别进行计数。三维分别为时间、\(x\)、\(y\),分治时间,归并\(x\),树状数组\(y\)。
代码
#include
#include
BZOJ1176 Mokia
思路
在上面的基础上改成了动态加点,但是处理方式其实是一样的,题目里面的\(s\)是没有用的。
代码
#include
#include
陌上花开
思路
三维偏序,在进行\(cdq\)分治之前需要将相同的进行合并,最后对于相同的花(假设是\(v\)),那么对于\(v\)的等级要加上\(cnt[v]-1\)。三维分别为\(a,b,c\),分治\(a\),归并\(b\),树状数组\(c\)。
代码
#include
#include
BZOJ3295 动态逆序对
思路
我们先跑出原序列的逆序对,然后用\(cdq\)来计算出删除这个数逆序对的变化值,三维分别为时间、位置、值,分治时间,归并位置,树状数组值。
代码
#include
#include
HDU5324 Boring Class
思路
三维分别是位置、\(L\)、\(R\),分治位置,归并\(R\),树状数组\(L\)。
由于需要输出字典序最小的方案,因此我们考虑在合并的时候用右边来更新左边的信息,记录每个位置作为\(v_1\)能选出的最大的\(m\)。
代码
#include
#include
HDU5126 stars
思路
四维偏序,分别为时间,\(x,y,z\),分治时间和\(x\),归并\(x,y\),树状数组\(z\)。
注意第二个\(cdq\)不能改变第一个的数组位置,在第一个\(cdq\)时需要标记每个数组在该分治中是左边一半还是右边一半,如果不标记的话那么在第二次\(cdq\)时就会忽略时间的关系。
代码
#include
#include