P7448

news/2024/11/18 22:26:30/文章来源:https://www.cnblogs.com/Carousel/p/18198578

problem & 双倍经验

低配版本

没有 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

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

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

相关文章

Games101-9 advanced rendering

Physically Based Rendering: From Theory to Implementation (pbr-book.org) advanced light transport 有/无偏的光线传播方法双向路径追踪这里主要的光照为间接光 --- 不是直接光源 --- 实现比较困难。使用马尔科夫链进行推测。优势: 对于光线复杂的情况来水,比较好。 劣势…

Games101-1 Linear Algebra

简单介绍和资源列表 https://sites.cs.ucsb.edu/~lingqi/teaching/games101.html 线代vector -- 向量表示 $\vec{a}$ and $\mathbf{a}$ and $\vec{AB} = B - A$ 指代方向 没有起始点 向量的长度$\left | \vec{a} \right |$ 单位向量 $\hat{a} = \vec{a} / \left | \vec{a} \ri…

Games101-2 transform

2D point = $(x,y,1)^T$ 2D vector = $(x,y,0)^T$ --- 平移不变性transform translationAffine transformner逆变换 就是逆矩阵 变换的组合 矩阵的乘法 变换的分解变换到中心 旋转 变换回原始位置三维3D 旋转view transformationmodel transform view transform projection tr…

es集群迁移操作

logstash迁移集群/home/secure/logstash-7.8.1/bin/logstash -f /home/secure/logstash-7.8.1/config/event0515.conf -f --debug -f 检查配置文件语法/home/secure/logstash-7.8.1/bin/logstash -f /home/secure/logstash-7.8.1/config/event0515.conf > /home/secure…

智慧园区可视化大屏设计

首先,让我们来了解一下什么是智慧园区可视化大屏。简单来说,它是一种将复杂的数据通过图形化的方式展示出来的技术。这种技术的出现,让我们可以更直观、更清晰地理解数据,从而做出更准确的决策。那么,为什么我们要讨论智慧园区可视化大屏设计呢?因为,它不仅仅是一种技术…

【Modbus】转发:Modbus通讯模拟仿真环境的搭建

文章目录一、概要二、所需工具介绍三、搭建虚拟仿真环境1.Modbus RTU虚拟仿真环境搭建1.1.虚拟串口工具(VSPD)使用1.2.虚拟从站工具(ModSim32)使用1.3.虚拟主站工具(Modscan32)使用1.4.更改虚拟从站工具(ModSim32)的Modbus寄存器的值1.5.更改虚拟主站工具(Modscan32)…

深度学习项目-MobileNetV2水果识别模型

本项目旨在研究利用深度学习模型进行水果图像分类的方法,具体包括两个主要任务:一是使用卷积神经网络(CNN)模型进行水果图片的分类,二是探索轻量级神经网络模型MobileNetV2在水果图像分类中的应用。FruitRecognition DeepLearning深度学习小项目,利用CNN和MobileNetV2搭建…

celery异步框架

celery 介绍 https://github.com/celery/celery/ https://docs.celeryq.dev/en/stable/celery是一个分布式异步任务框架,是一个灵活且可靠的,处理大量消息的分布式系统,可以在多个节点之间处理某个任务,是一个专注于实时处理的任务队列,支持任务调度,所以 celery 本质上是…

北航研究生算法期末复习整理

算法设计与分析 数据结构 二叉树 线索二叉树(Threaded Binary Tree) 利用二叉链表中空的指针域指出结点在某种遍历序列中的直接前驱或直接后继 指向前驱和后继的指针称为线索 实现不用栈的树深度优先遍历算法 二叉查找树(Binary Search Tree, BST) 左子树都更小,右子树都更大…

让你的电脑准时“打个盹”:Win10定时休眠

哈喽,大家好,我是木头左!一、Windows 10任务计划程序 在快节奏的工作生活中,常常需要让电脑在特定时间执行某些任务,而Windows 10的任务计划程序就是为此而生的神器。它不仅可以自动更新系统、备份文件,甚至还能帮你管理休息时间。想象一下,工作到深夜,电脑突然自己进入…

说说JavaScript中的事件模型

一、事件与事件流 javascript中的事件,可以理解就是在HTML文档或者浏览器中发生的一种交互操作,使得网页具备互动性, 常见的有加载事件、鼠标事件、自定义事件等 由于DOM是一个树结构,如果在父子节点绑定事件时候,当触发子节点的时候,就存在一个顺序问题,这就涉及到了事…