P7448
没有 Ynoi 标志性算法卡常,这点差评。
拆解问题
定义 \(lst_i\) 为上一个和 \(i\) 号点相同的位置。
由于几个转移都差不多,我们以 \([l,r - 1]\) 扩展到 \([l,r]\) 为例。
我们知道答案会加上 \([lst_r,r]\) 中 新出现的 且 \(> a_r\) 的数的 种类数。这个可以拆解为 \([l,r]\) 中大于 \(a_r\) 的种类数减 \([l,lst_r]\) 中 \(>a_r\) 的种类数。
经过转化,我们依然需要求 种类数。我们对于数组做一次扫描线,扫到 \(i\) 时,计算与 \(i\) 有关的贡献并且删除与 \(lst_i\) 有关的贡献。
所以问题就变成了求 总数。要求 单点加和区间内大于 \(x\) 的数的个数。那么这就是一个带权的二维数点。
因为我们使用了莫队二离,所以我们需要处理一下练个操作。
\(O(n)\) 个修改即为加入 \(i\) 和删除 \(lst_i\)。
\(O(n \sqrt m)\) 个询问。
注意在此处有两个性质:
第二维的值取决于第一维的值
保证所有的 \(x\) 坐标和 \(y\) 坐标不同
由于我们需要平衡复杂度,所以我们需要维护一个数据结构其修改操作的时间复杂度为 \(O(\sqrt n)\),查询操作为 \(O(1)\)。
我们可以使用二维分块进行维护。
二维分块
注意:此处讲的与上面的有稍许不同,但本质一样。
假如说我们需要位于这样一个可爱的矩阵(左下角为 \([1,1]\),右上角为需要询问的点)。

下面我们令 \(\mathbf{a} = n^{0.25},\mathbf{b} = n^{0.5},\mathbf{c} = n ^ {0.75}\)。
我们按照如下规则进行分块:
先分出 \(\sqrt n\) 个 \(\bf c \times c\) 个红块。
对于红块域分成 \(\sqrt n\) 个 \(\bf b \times b\) 个绿块。
接着将平面分成一个个大小为 \(n \times \mathbf{c}\) 个区域。然后分出 \(\sqrt n\) 个大小为 \(\bf c \times b\) 个橙块。
再竖着将平面分成一个个大小为 \(\mathbf{c} \times n\) 和区域,每个区域分成 \(\sqrt n\) 个大小为 \(\bf b \times c\) 个蓝块。
加入一个点时需要分别以红块,绿块,橙块和蓝块做二维前缀和。所以修改/加入的复杂度即为 \(O(\sqrt n)\)。
因此可以把一个询问分成这样。

此处借了 \(\text{xfrvq}\) 大佬的图。
接下来就考虑散块的贡献,即为上图中黄色的区域。
由于上面的性质,我们可以把散块分成下面的样子:

然后对于每一次的插入,我们枚举紫色范围内的 \(x\) 坐标,然后在查看 \(y\) 是否也在范围内,若是那就加上贡献。
对于粉色部分,我们枚举粉色范围内的 \(y\) 坐标,然后查看 \(x\) 坐标是否也在范围之内,若是则加上贡献。
然后注意蓝色区域块不要算重复就行了。
P7448的更多相关文章
- 再次理解javascript中的事件
一.事件流的概念 + 事件流描述的是从页面中接收事件的顺序. 二.事件捕获和事件冒泡 + 事件冒泡接收事件的顺序:
- 使用sklearn构建含有标量属性的决策树
网络上使用sklearn生成决策树的资料很多,这里主要说明遇见标量数据的处理. 经查验参考资料,sklearn并非使用了课上以及书上讲的ID3算法,而是选择了CART,该算法生成二叉树:scikit- ...
随机推荐
- 【Oracle】使用like的时候遇到的问题
[Oracle]使用like的时候遇到的问题 like语句其中的%就代表着一个零或者多个字符,_代表一个字符,%与_可以同时使用 name想查询以'_'结尾的字符 用这个语句就会有问题 select ...
- openpyxl模块操作Excel
1.openpyxl模块了解 1.excel版本问题 03版本之前的excel文件后缀名xls 03版本之后的excel文件后缀名xlsx 2.python操作excel表格的模块 openpyxl ...
- C51笔记-#点灯#流水灯#延时#库函数
- python执行SQL语句中有格式化时是否需要加引号
import pymysqldb = pymysql.connect(host='localhost', user='root', password='123456', database='test' ...
- 【GUI软件】抖音搜索结果批量采集,支持多个关键词、排序方式、发布时间筛选等!
目录 一.背景介绍 1.1 爬取目标 1.2 演示视频 1.3 软件说明 二.代码讲解 2.1 爬虫采集模块 2.2 软件界面模块 2.3 日志模块 三.获取源码及软件 一.背景介绍 1.1 爬取目标 ...
- Linux(一):Linux操作系统
Linux(一):Linux操作系统 对于我们编程人员来讲,linux对于我们几乎已经是像windows对于普通用户一样,好像和同行交流说不会linux就像说不会用计算机一样羞耻.这里打算从头开始温故 ...
- 网络拓扑—WEB-IIS服务搭建
目录 WEB-IIS服务搭建 网络拓扑 配置网络 IIS PC 安装IIS服务 配置IIS服务(默认站点) PC机访问网页 配置IIS服务(新建站点) PC机访问网页 WEB-IIS服务搭建 网络拓扑 ...
- IDEA文件夹注释插件TreeInfotip使用
目录 前景提要 环境整合 构建工具(参考工具部署方式) 下载插件 使用 前景提要 很多开源代码或者公司代码,因为层级比较多,所以查阅困难,发现一个TreeInfotip插件可以对这样的文件做注释 环境 ...
- pageoffice6在线编辑word 文件禁止鼠标右键
有时让用户使用PageOffice只读模式(OpenModeType.docReadOnly)打开Word文件后,为了更好的只读效果,还希望禁用Word中的右键菜单,实现此效果只需创建com.zhuo ...
- flask-wtf和WTForms官网翻译详解
https://flask-wtf.readthedocs.io/en/stable/# https://wtforms.readthedocs.io/en/2.3.x/ 介绍: wtformflas ...