分块和莫队总姐

news/2025/3/25 21:41:26/文章来源:https://www.cnblogs.com/lewisak/p/18792394

分块和莫队总结

分块

算法属性

离线/在线 在线
时间复杂度 因题而异,但经常是 \(O(n\sqrt n)\)
空间复杂度 因题而异,但经常是 \(O(n\sqrt n)\)\(O(n)\)
实用性 广

算法简介

分块其实是一种思想而并非算法。

分块的思想是将序列每 \(len\) 长经行一次划分,然后在每一块中单独处理信息,在修改或查询时对整块部分直接修改或查询,对散点暴力,即可做到 \(O(qn\div len)\) 的优秀时间复杂度(因题而异)。

这么说有点空洞,还是看几到题吧:

[hdu1166 敌兵布阵](Problem - 1166 (hdu.edu.cn))

题意

维护一个长度为 \(n\) 的序列支持单点修改,区间求和。

思路

读完题后发现是经典数据结构题,线段树树状数组啥的都能做,但我们要讲的是分块。

考虑将序列分成 \(\sqrt n\) 块,对于每块维护区间和,修改时直接修改本块和和单点,查询时吧所有整块(最多 \(\sqrt n\) 块)和左右的散点(最多 \(\sqrt n\) 个)加起来即可,注意特判左右端点在一块的情况。

[[HNOI2010] 弹飞绵羊]([P3203 HNOI2010] 弹飞绵羊 - 洛谷 (luogu.com.cn))

题意

原题面挺清晰的。。。

思路

把原序列分块,对于每块维护要几步弹出和弹出后会飞到哪里,修改时直接块内暴力重构,查询时就一直跳直到飞走。

[[Violet] 蒲公英]([P4168 Violet] 蒲公英 - 洛谷 (luogu.com.cn))

题意

求区间最小众数,不带修。

思路

预处理出:

  1. \(p_{i,j}\) 表示第 \(i\) 个块到第 \(j\) 个块的最小众数
  2. \(s_{i,j}\) 表示前 \(i\) 个块中 \(j\) 出现了几次

对于查询,我们暴力统计散块,然后和整块的答案合并起来即可。

[教主的魔法](P2801 教主的魔法 - 洛谷 (luogu.com.cn))

题意

维护一个长度为 \(n\) 的序列支持区间增值,区间求 \(rk\)

思路

把每一块排序后二分查找 \(rk\),散点暴力遍历所处整块,修改就给整块打懒标记,散点增值后重新排序即可。

莫队

算法属性

在线/离线 离线
时间复杂度 \(O(n\sqrt n)\)
空间复杂度 \(O(n)\)
实用度

算法简介

如果从 \([l,r]\) 的答案能够 \(O(1)\) 扩展到与 \([l,r]\) 相邻的区间的答案,那么可以离线分块后将查询的 \(l\) 所在块为第一关键字,\(r\) 为第二关键字排序,在 \(O(n\sqrt{n})\) 的复杂度内求出所有询问的答案,复杂度分析

小B的询问

题意

原题面很明晰了。

思路

板题,开一个桶和数组记录答案,然后用小学数学就会的方法拆平方差的贡献就秒了。

[国家集训队] 小 Z 的袜子

也是做上国集题了啊。

题意

原题面很明晰了。

思路

清晰推式子题。

\[(a∗(a−1)/2+b∗(b−1)/2-c∗(c−1)/2....)/((R*−L*+1)∗(R−L)/2) \\=(a*2+b*2+c*2+...x*2−(a+b+c+d+.....))/((R−L+1)∗(R−L)) \\=(a*2+b*2+c*2+...x*2−(R−L+1))/((R−L+1)∗(R-L)) \]

[AHOI2013] 作业

题意

求一段区间中大小在 \([a,b]\) 的数的个数和大于等于 \(a\) 或小于等于 \(b\) 的数的个数。

思路

维护两个树状数组,一个表示数的个数,一个表示不同数值的个数即可,还有更优的方法懒得写了。

BZOJ4358 permu

题意

给出一个长度为 n 的排列 \(P(P1,P2,...Pn)\),以及m个询问。每次询问某个区间[\([l,r]\)中,最长的值域连续段长度。

思路

回滚莫队板题,维护 \(L\)\(R\) 数组表示连续段能向左向右多远,然后注意到每次加点都只用更新连续段的最左和最右的 \(L\)\(R\),原因是别的地方你加了也没贡献,只有点落在最左最右才能更新答案,我们考虑到正常莫队的话右端点是单调上升的不用撤回,于是考虑左端点的撤销,我们可以考虑对于所有左端点在一块的查询让左端点从右往左扫,然后每到下一块暴力清楚一遍。

[WC2013] 糖果公园

题意

给你一棵被染色的树,要求支持:

  1. 对于询问的一条最短路径求每个点的颜色价值之和乘每个颜色出现次数的价值之和。

  2. 修改单点颜色。

思路

这种看着就很抽象还没有可加性的题考虑先将树拍扁后用带修莫队搞,但我们注意到我们需要在遍历完子树后清空子树的贡献,所以不能拿 dfs 序搞。

做法,是什么呢好难猜啊于是考虑括号序列,如果发现一个点被扫了两次就清除贡献,特判一下 \(lca\) 和起点即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/905667.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sd9

1、Knowledge Distillation in Iterative Generative Models for Improved Sampling Speed 提高采样速度2种方法:schedular优化、蒸馏 本论文基于DDIM,DDPM训练出来的epsilon theta 可以直接用于DDIM。由于DDIM的降噪过程是确定的,但是step多,由此定义了一个确定的教师分…

【昆工 25 考研调剂捡漏!计算机调剂名额近80+】

📣【昆工 25 考研调剂捡漏!计算机调剂名额近80+】📣 3月25日唐师兄更新 🔥计算机考生看过来!昆明理工大学信息工程与自动化学院调剂通道开启!名额多、方向全、全日制/非全均有岗,速进群锁定上岸席位! 🌟 重点调剂方向 🌟 ✅ 计算机应用技术(16人) ✅ 人工智能…

76. 最小覆盖子串(滑动窗口)

O(1)的字符频度匹配 设计一个 distance数组记录 s字串和 t的匹配程度。也就是每个字符频度的差 s[c] - t[c] = distance[c] t初始化distance中个字符的频度,如果s[c] 统计到一个,就在distance--,这样,当distance为0时,就代表这个字符完全匹配。 此外再创建一个count记录有…

在HTML页面通过JavaScript访问Ollama本地部署的DeepSeek

在HTML页面通过JavaScript访问Ollama本地部署的DeepSeek,顺便解决了 HTML 页面调用 Ollama 服务的跨域问题前排提醒: 1. 操作系统为Windows11 2. 如果你还没有使用Ollama本地部署DeepSeek,可以参考Windows系统上使用Ollama本地部署DeepSeek 3. 顺便解决了 HTML 页面调用 Oll…

【3】进制转换学习总结(c++)

1.进制的基础知识 一:进制是进位计数制,是人为定义的带进位的计数方法。对于任何一种进制,例如:X进制,就表示每一位置上的数运算时都是逢X进一位。比如十进制就是逢十进一,二进制就是逢二进一。 二:生活中常见的进制有:十进制,十二进制,二十四进制,六十进制等。 2.十…

vue+leaflet示例:地图截图批量导出(附源码下载)

demo源码运行环境以及配置运行环境:依赖Node安装环境,demo本地Node版本:14.19.1。 运行工具:vscode或者其他工具。 配置方式:下载demo源码,vscode打开,然后顺序执行以下命令: (1)下载demo环境依赖包命令:npm i (2)启动demo命令:npm run dev (3)打包demo命令: n…

智能Agent如何改造传统工作流:从搜索到全能助手

智能Agent如何改造传统工作流:从搜索到全能助手 引言:当AI遇上工作流 还记得我们以前搜索信息的方式吗?输入关键词,浏览大量结果,筛选有用内容,再整合成我们需要的答案。这个过程不仅耗时,还常常让人感到疲惫。 如今,智能Agent的出现正在彻底改变这一切。想象一下,你只…

vue+leaflet示例:拓展wms以及wmts地图范围裁剪(附源码下载)

demo源码运行环境以及配置运行环境:依赖Node安装环境,demo本地Node版本:14.19.1。 运行工具:vscode或者其他工具。 配置方式:下载demo源码,vscode打开,然后顺序执行以下命令: (1)下载demo环境依赖包命令:npm i (2)启动demo命令:npm run dev (3)打包demo命令: n…

vue+leaflet示例:快速渲染聚合矢量瓦片(附源码下载)

demo源码运行环境以及配置运行环境:依赖Node安装环境,demo本地Node版本:14.19.1。 运行工具:vscode或者其他工具。 配置方式:下载demo源码,vscode打开,然后顺序执行以下命令: (1)下载demo环境依赖包命令:npm i (2)启动demo命令:npm run dev (3)打包demo命令: n…

vue+leaflet示例:热力图(附源码下载)

demo源码运行环境以及配置运行环境:依赖Node安装环境,demo本地Node版本:14.19.1。 运行工具:vscode或者其他工具。 配置方式:下载demo源码,vscode打开,然后顺序执行以下命令: (1)下载demo环境依赖包命令:npm i (2)启动demo命令:npm run dev (3)打包demo命令: n…

vue+leaflet示例:地图全图以及框选截图导出功能(附源码下载)

demo源码运行环境以及配置运行环境:依赖Node安装环境,demo本地Node版本:14.19.1。 运行工具:vscode或者其他工具。 配置方式:下载demo源码,vscode打开,然后顺序执行以下命令: (1)下载demo环境依赖包命令:npm i (2)启动demo命令:npm run dev (3)打包demo命令: n…

vue+leaflet示例:聚合图功能(附源码下载)

demo源码运行环境以及配置运行环境:依赖Node安装环境,demo本地Node版本:14.19.1。 运行工具:vscode或者其他工具。 配置方式:下载demo源码,vscode打开,然后顺序执行以下命令: (1)下载demo环境依赖包命令:npm i (2)启动demo命令:npm run dev (3)打包demo命令: n…