首页 > 其他 > 详细

分块初步学习

时间:2021-01-04 09:10:04      阅读:21      评论:0      收藏:0      [点我收藏+]

例题:区间加,区间查询


下文使用 \(m\) 表示查询次数,以示区分。
朴素做法 \(O(m\times n)\).
我们发现需要优化后面这个 \(n\).
考虑分块。将整个区间打成 \(\lceil n / \sqrt{n} \rceil\) 块。
称有 \(\sqrt{n}\) 个数于其中的块为 整块,反之则称为 散块
对于区间加,令区间为 \([l,r]\).
\(l,r\) 位于同一个块时,暴力处理。复杂度 \(O(\sqrt{n})\).
否则:令 \(l\) 位于第 \(p\) 个块,\(r\) 位于第 \(q\) 个块。从第 \((p+1)\) 个块到第 \((r-1)\) 个块,将它们视为整体,仅需要打上标记即可。在第 \(p\) 个块和第 \(q\) 个块再暴力处理。复杂度 \(O(3\sqrt{n})=O(\sqrt{n})\).
查询操作也与之类似。总复杂度 \(O(m\sqrt{n})\).

分块初步学习

原文:https://www.cnblogs.com/Xray-luogu/p/14227555.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!