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. vue 商品sku,笛卡尔算法,商品添加。动态生成table,table添加值后 再生成的table 不改变table之前输入的值

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. 旧版本的centOS下载(国内-清华)

    链接如下: https://mirrors.tuna.tsinghua.edu.cn/centos-vault/

  3. Llama 3 开源了「GitHub 热点速览」

    近日,Meta(原 Facebook)开源了他们公司的新一代大模型 Llama 3,虽然目前只放出了 8B 和 70B 两个版本,但是在评估结果上已经优于 Claude 3 Sonnet.Mistra ...

  4. 宏杉科技加入阿里云PolarDB开源数据库社区

    简介: 宏杉科技签署阿里巴巴开源CLA(Contribution License Agreement, 贡献许可协议), 正式与阿里云PolarDB 开源数据库社区牵手. 宏杉科技签署阿里巴巴开源CL ...

  5. 疫情带火了这款APP:2600个学生一天点赞70万次

      这几天,全国中小学生经历了"过山车"一样的心情. 因为疫情的不断蔓延,1月27日,教育部下发通知,2020年春季学期延期开学. 随后,教育部又提出"利用网络平台,停课 ...

  6. 创新推出 | Serverless 场景排查问题利器:函数实例命令行操作

    ​简介: 实例命令行功能的推出希望能消除用户使用 Serverless 的"最后一公里",直接将真实的函数运行环境展现给用户,此后 Serverless 将不再是一个"黑 ...

  7. dotnet 7 WPF 破坏性改动 按下 F3 让 DataGrid 自动排序

    本文记录在 dotnet 7 下的 WPF 的一个破坏性改动.在 dotnet 7 下的 WPF 支持 DataGrid 在按下 F3 键的时候,自动按照当前所选列进行列自动排序.这将会让原本采用 F ...

  8. 从SAP CRM上传设备到SAP ERP

    文档<Step by step to download equipment from ERP with hierarchy>描述了从ERP复制设备到CRM的步骤.默认情况下,ERP中的设备 ...

  9. OpenCompass-书生浦语大模型实战营第二期第7节作业

    书生浦语大模型实战营第二期第7节作业 这一节的作业和第6节作业一样没有特别多好说的,以运行结果为主. 基础作业 使用 OpenCompass 评测 internlm2-chat-1_8b 模型在 C- ...

  10. Lora训练的参数和性能

    主要为了测试模型增加Lora模块后,参数量和训练速度的变化情况.结论:正常情况下,增加Lora模块是会增加参数量的,因此前向传播和反向传播的时间也会增加.但是,在大语言模型训练的情况下,因为基础模型本 ...