problem & 双倍经验 & blog

低配版本

没有 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\) 坐标是否也在范围之内,若是则加上贡献。

然后注意蓝色区域块不要算重复就行了。


code

P7448的更多相关文章

  1. 再次理解javascript中的事件

    一.事件流的概念 + 事件流描述的是从页面中接收事件的顺序. 二.事件捕获和事件冒泡 +    事件冒泡接收事件的顺序:

  2. 使用sklearn构建含有标量属性的决策树

    网络上使用sklearn生成决策树的资料很多,这里主要说明遇见标量数据的处理. 经查验参考资料,sklearn并非使用了课上以及书上讲的ID3算法,而是选择了CART,该算法生成二叉树:scikit- ...

随机推荐

  1. 力扣459(java)-重复的子字符串(简单)

    题目: 给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成. 示例 1: 输入: s = "abab"输出: true解释: 可由子串 "ab&quo ...

  2. HarmonyOS NEXT应用开发案例——自定义TabBar

    介绍 本示例主要介绍了TabBar中间页面如何实现有一圈圆弧外轮廓以及TabBar页签被点击之后会改变图标显示,并有一小段动画效果. 效果图预览 使用说明: 依次点击tabBar页面,除了社区图标之外 ...

  3. 一种关于低代码平台(LCDP)建设实践与设计思路

    简介: 作者在负责菜鸟商业中心CRM系统开发过程中发现有一个痛点:业务线很多,每个业务线对同一个页面都有个性化布局和不同的字段需求,而他所在的团队就3个人,那么在资源有限的情况下该如何支撑呢?本文就降 ...

  4. 先行一步,7大技术创新和突破,阿里云把 Serverless 领域的这些难题都给解了

    ​简介: 函数计算 FC 首创 GPU 实例.业内首发实例级别可观测和调试.率先提供端云联调和多环境部署能力.GB 级别镜像启动时间优化至秒级.VPC 网络建连优化至200ms,Serverless ...

  5. [GPT] quasar 在 setup() 周期阶段想设置meta信息,如何获取当前的 route 参数动态设置

    在Vue 3 的Composition API(组合式API)中,特别是在 setup() 钩子函数阶段, 由于没有访问到常规的 Vue 实例(this上下文),所以不能直接使用 this.$rout ...

  6. WPF 简单聊聊如何使用 DrawGlyphRun 绘制文本

    在 WPF 里面,提供的使用底层的方法绘制文本是通过 DrawGlyphRun 的方式,此方法适合用在需要对文本进行精细控制的定制化控件上.此方法特别底层而让调用方法比较复杂,本文告诉大家一些简单的使 ...

  7. C++多态与虚拟:Objects 实例化(Objects Instantiation)探究

    一.Objects的创建 依据已有的class CPoint ,我们可以产生一个或多个object(对象),或者说是产生一个instance(实体): CPoint aPoint(7.2); // a ...

  8. 在网页上直接运行Win11,5秒内用AI克隆自己的声音 | 蛮三刀酱的Github周刊第二期

    大家好,这里是每周更新的Github精彩分享周刊,我是每周都在搬砖的蛮三刀酱. 我会从Github热门趋势榜里选出 高质量.有趣,牛B 的开源项目进行分享. 1. PowerShell:不止于Wind ...

  9. Solution Set - 组合计数

    CF40E Number Table Link&Submission. 显然 \(n,m\) 奇偶性不同时无解.奇偶性相同时,假设有一行全为空,剩下每行至少一个有空,则除这些位置外没有限制的位 ...

  10. elementui 时间戳和后台配合

    保存时间 思路: 前端传时间戳, 后台表里的时间类型为timestamp, model结构体tag设置为 *time.Time json:"activationTime" gorm ...