标签:处理 set BMI 归并排序 sum 比较 art 广播站 ble
CDQ分治是一种时间魔术。
在正常的世界中,韶华易逝,时间总是在向前流逝着。只有过去和现在能决定未来,未来无法反过来决定现在和过去,不然就会发生世界线错乱的现象。
CDQ分治同样顺应着时间向前流逝这条规律。
总共有n秒,每秒钟都发生了一起事件。
CDQ分治的操作如下。
看看著名的三维偏序问题。
我们对第一维cdq分治,对第二维进行排序,对第3维进行BIT线段树维护。
其实,就是cdq分治套一个二维偏序关系问题!
CF669E:Little Artem and Time Machine
题意:一个multiset,需要支持以下操作,1.到\(t\)时刻,插入\(x\) 2.在\(t\)时刻删除\(x\) 3.查询\(t\)时刻\(x\)的个数.
做法:
code:喵
题意:在坐标轴上有很多个广播站,第i个,位置为x[i],覆盖半径为r[i],频率为f[i],如果两个站\(i,j(i<j)\),都在对方半径内,且频率差的绝对值不超过k,那么就把这样的\((i,j)\)成为bad,问有多少个bad的pair.
做法:
code:戳
看了考虑清楚按哪一维CDQ分治,能够使得算答案比较方便,很重要啊
题意:给序列a
,有一些。操作为为两种,操作1:a[p]=x
,操作2:区间查询[l,r]
,查询此区间内,每个元素,最后一次出现的位置 - 第一次出线的位置。
做法:
a[i]
,我们记录它上一次出现的位置pre[i]
, 对于区间\([l,r]\),\(\sum_{[pre_i \geq l, i \leq r]} (i-pre[i])\)就是答案了。code:喵
哇,我的这种写法看来有点慢啊。
目前,我的写法是,先算\([l,mid]\)对\([mid+1,r]\)的贡献,再递归地处理他们。但先递归搞\([l,mid]\),\([mid+1,r]\)。递归的时候顺便完成对第二维的归并排序。再算\([l,mid]\)对\([mid+1,r]\)的贡献似乎更好一点。
标签:处理 set BMI 归并排序 sum 比较 art 广播站 ble
原文地址:https://www.cnblogs.com/RUSH-D-CAT/p/9749185.html