cdq分治&整体二分学习缓存

cdq分治:离线后化时间序为其他某些维上的序列,对于每一次二分操作, 所有左边的数据可能对右边的数据产生影响,在二维逆序对里表现为每次把右子区间的一个数放入左区间时都要加上左边还没放入的数的个数,在三维偏序中改为用树状数组维护原来的值,即用某种数据结构维护(二维逆序对int,三维树状数组,四维再来一个cdq)分治后左区间对右侧区间的影响,任意一对答案只会在这两个数正好被分在相邻的区间时统计,这样就不会出锅。

整体二分:对于多个询问+修改而言,将她们用时间顺序排序,然后对于每一个询问而言,(以k大数为例)将前面所有大于k的修改加入,然后对于每个个询问,如果她在这时已经比k大了就将之放入左侧区间,否则将其减去此时已有答案后加入右侧递归区间;对于所有修改,比mid大的就放入右侧递归,否则放入左侧递归,相当于对于右侧递归序列里的所有询问而言,左侧递归序列中所有修改都能对其产生答案故不用再考虑,因此就转化成了一个近似相同的递归。

珂欣隆的分块:对于时间分块,将修改——》删除+插入,对于每个时间块先全部挖掉,最后再把可能对块内询问造成影响的全部修改暴力搞进去,然后就获得了n3/5方的优美暴力

你可能感兴趣的:(各类笔记)