分治
分治法是一种效率很高的算法, 往往带有一个log级的复杂度.
1. CDQ分治
- CDQ分治可以应用到带有修改操作的题目中, 对操作进行分治, 通过考虑前一半操作对后一半操作的影响达到分治的目的.
- 应用的条件比较苛刻
- BZOJ-2716-天使玩偶angel-CDQ分治 能这样做还得益于曼哈顿距离的特殊性
- BZOJ-2001-city城市建设-HNOI2010-CDQ分治 因为最小生成树Kruskal算法是基于边的算法,
所以可以对边进行分治
2. 二分答案
- 路由器安置(Routing) 二分答案,
然后用到二分查找. 比较巧妙地是二分半径而不是直径, 这样可以避免出现小数. - BZOJ-3110-K大数查询-ZJOI2013-整体二分 整体二分的做法是比较BT的,
因为答案有上下界, 而且答案一定是前面的操作造成的, 所以直接对答案进行二分. 用到了线段树维护(也可以用树状数组). 思考: CDQ能做吗?
- BZOJ-2440-完全平方数-中山市选2011-容斥原理-莫比乌斯函数-二分查找 二分答案用容斥原理判断.
3. 三分法
- BZOJ-1857-传送带-SCOI2010 两次三分.
因为是两个单峰函数.
总结: 分治的思想很重要, 考场上如果能想到正确解法的话只要思路清晰, 代码难度适中吧.
时间: 2024-11-11 11:38:50