随笔分类 -  算法——分治

posted @ 2019-08-18 20:23 wxyww 阅读(180) 评论(0) 推荐(0) 编辑
摘要:"题目链接" problem 给出n个点,每个点有权值,求最小生成树。定义一条边的代价为所连接两点的权值异或值。 solution 考虑分治,根据最高位为0还是1分为两部分。然后分别求最小生成树。合并的时候就将最高位为0的一部分插入到trie中,然后从最高位为1的一部分中查询。 注意对trie的清空 阅读全文
posted @ 2019-02-17 08:31 wxyww 阅读(199) 评论(1) 推荐(0) 编辑
摘要:题目链接 思路 四维偏序 $CDQ$套$CDQ$,第一维默认有序。第二维用第一个$CDQ$变成有序的。并且对每个点标记上第一维属于左边还是右边。第二个$CDQ$处理第三维,注意两个$CDQ$不能用同一个数组,否则第二维就变成无序的了。最后一维用个树状数组统计答案。 代码 cpp / @Author: 阅读全文
posted @ 2019-02-16 15:46 wxyww 阅读(412) 评论(0) 推荐(0) 编辑
摘要:题目链接 题意 求三元组的严格上升子序列 思路 先考虑暴力$dp$一下 考虑用$CDQ$分治优化这个$dp$。 大体思路是,先按照第一维排序,保证第一维是严格上升的。然后$CDQ$一下第二维。树状数组维护第三维(需要先离散化)。这里用到的是树状数组维护前缀最大值。 有两个$bug$调了很久。 bug 阅读全文
posted @ 2019-02-15 10:25 wxyww 阅读(270) 评论(0) 推荐(0) 编辑
摘要:题目链接 题面 题意 把每个位置的点都看成是一个二维坐标系中的点。比如第$i$个点就是$(i,a[i])$。 有两种操作 询问:然后每次询问的就是与当前点坐标的曼哈顿距离小于等于$k$的点。 修改:修改第i个点的纵坐标。保留历史点。 思路 旋转坐标系。然后就变成了添加一个点和询问一个子矩阵内点的个数 阅读全文
posted @ 2019-02-15 08:01 wxyww 阅读(237) 评论(0) 推荐(0) 编辑
摘要:$cdq$分治主要思想就是将操作离线下来,然后分治之后统计二分之后,左边的修改对于右边查询的贡献。可以顶替很多复杂的数据结构。 学会下面这几类问题差不多就会$cdq$了。 个人认为看代码比较容易学。 二维偏序 先考虑这样一类问题 给出n个二元组$(a,b)$,求出有多少对$i,j$满足$a_i<b_ 阅读全文

点击右上角即可分享
微信分享提示