首页 > 代码库 > bzoj 2527: [Poi2011]Meteors
bzoj 2527: [Poi2011]Meteors
【题意】
把一个环 分成 m 份, 每份各属于 n 个国家中的一个, 每次 给 Li ~ Ri 这段区间加上 Ci, 问第 i 个国家 在第几次 达到了 Ki。
【题解】
考虑这道题的弱化版: 只有一个国家, 二分修改操作就可以 log n 地计算出答案了。
那么这道题 又有哪里被强化了呢?
- 每次修改都要改一段区间而不是一个点了
区间修改自然的应对措施: 线段树或树状数组
- 有多个国家要计算了
能否还向原来一样二分呢? 似乎是可以的,只是每一次都要对 每一个国家分别计算 在 l ~ mid 的这段区间是否合法就可以了。
噔噔噔! 于是“整体二分”的大致思想就出来了。
具体实现的时候, 每一次 二分在 判是否合法的时候 都可以将 当前的 集合 分成 两个 子集 :在 mid 之前就可以 完成的 和在 mid 之前不可以完成的, 把这二者分别递归至 l ~ mid 区间 和 mid + 1 ~ r 区间
代码可以看这个人的,我的比较丑,,
整 体二分 写出来感觉很像一棵线段树呢, 其实整体二分就是把在二分每一个点的时候所有可能走到的路径 都走一遍(走出来自然是一个完全二叉树), 避免了一个点被计算多次, 虽然也会走到一些不必要的点, 但在整体上 还是 把 n * logn 的 复杂度 降为 2 * n 了。
bzoj 2527: [Poi2011]Meteors
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。