数据结构做题记录

news/2025/4/3 0:31:31/文章来源:https://www.cnblogs.com/liuir/p/18804461

\(\text{I}\). luoguP5142 区间方差

容易得到

\[d=\dfrac{n\sum_{i=1}^na_i^2-\left(\sum_{i=1}^na_i\right)^2}{n^2} \]

线段树维护出 \(\sum a_i\)\(\sum a_i^2\) 即可。

\(\text{II}\). CF739C Alyona and towers

考虑现将原数组差分,则可以将题目转换为求一个区间满足先是一串正数,再是一串负数。

而这个可以用类似最大子段和的方法维护,即对于每个区间维护最大长度,从左边开始的最大长度和从右边开始的最大长度。

\(\text{III}\). [JSOI2018] 列队

将一些数变成连续的数可能不太好处理。于是按套路减去它的排名,然后变成相同的数。

具体地,有

\[ans=\sum_{i=l}^r\left|a_i-rk_i-k+1\right| \]

其中 \(rk_i\) 表示 \(a_i\)\(a_{[l,r]}\) 内的排名。

为方便先将 k--

\(a_i\) 从小到大考虑每个 \(i\),因为 \(a_i\) 互不相同,所以 \(a_i\) 的增长一定不会慢于 \(rk_i\) 的增长。于是满足 \(a_i-rk_i-k\ge0\) 的一定是一段后缀。

考虑在主席树上二分出分界点,然后就可以 \(O(1)\) 计算了。

时间复杂度 \(O(n\log n)\)

\(\text{IV}\). luoguP3730 曼哈顿交易

直接暴力莫队可以用平衡树求出第 \(k\) 小,时间复杂度为 \(O(n\sqrt n\log n)\)。但毒瘤出题人显然不想要它通过。

由于不可差分,不能二次离线,只能考虑用 \(O(1)-O(\sqrt n)\) 的分块。

对值域分块,维护出每个值的出现次数和每个块内所有值的总出现次数。查询时先跳整块,再跳散块即可。

时间复杂度 \(O(n\sqrt n)\)

\(\text{V}\). *luoguP7708 八云蓝自动机 Ⅰ

带修莫队可以做到 \(O(n^\frac{5}{3})\),很可惜不能通过。

首先单点修改可以新建一个新点变成交换操作。

考虑在莫队时维护以下信息:

  • 现序列的状态 \(a\)

  • 现位置 \(i\) 上的数的原位置 \(rev_i\)

  • 原位置 \(i\) 上的数的现位置 \(pos_i\)

  • 现序列上位置 \(i\) 被询问的次数 \(add_i\)

当右端点右移 \(r-1\to r\) 时:

  • \(r\) 是交换 \(x,y\),直接交换 \(a_x,a_y\)\(rev_x,rev_y\)\(pos_{rev_x},pos_{rev_y}\)\(add_x,add_y\)

  • \(r\) 是询问 \(x\),令 \(ans\leftarrow ans+a_x\)\(add_x\leftarrow add_x+1\)

当左端点左移 \(l+1\to l\) 时:

  • \(l\) 是交换 \(x,y\),直接交换 \(a_{pos_x},a_{pos,y}\)\(rev_{pos_x},rev_{pos_y}\)\(pos_x,pos_y\)。然后答案加上交换后的 \((a_{pos_x}-a_{pos_y})(add_{pos_x}-add_{pos_y})\)

  • \(l\) 是询问 \(x\),令 \(ans\leftarrow ans+a_{pos_x}\)\(add_{pos_x}\leftarrow add_{pow_x}+1\)

剩余两种情况是类似的,只不过符号不同。

时间复杂度 \(O(n\sqrt n)\)

\(\text{VI}\). *[APIO2019] 路灯

点亮路灯相当于连接 \((i,i+1)\),熄灭路灯相当于断开 \((i,i+1)\)

考虑维护出每个点所属的连通块,以及该连通块的左右端点。那么每次修改相当于区间赋值,可以用 ODT 实现。

\(bel_i\) 表示 \(i\) 所在的连通块,\(l_i,r_i\) 为第 \(i\) 个连通块的左右端点。那么点亮路灯就会使 \([l_{bel_i},i]\)\([i+1,r_{bel_{i+1}}]\) 联通。

使用提前计算贡献的方法。点亮是给 \([l_{bel_i},i]\)\([i+1,r_{bel_{i+1}}]\) 的贡献加上 \(q-T\)\(T\) 为当前时间),熄灭时就减去。注意到这是一个动态矩形加,单点查的操作,可以用 cdq 分治+扫描线或树套树解决。

\(\text{VII}\). [POI2011] MET-Meteors

先考虑对每个国家怎么做。

可以想到二分,判断是可以将前 \(mid\) 个询问的操作都加上贡献。

但这样太浪费了,于是可以整体二分再用树状数组维护。

\(\text{VIII}\). [Ynoi2006] rldcot

由于 \(\operatorname{lca}\) 总共就只有 \(n\) 个,所以肯定可以找支配对。

套路的树上启发式合并,每次加入一个点时找到它的前驱和后继,这样肯定支配了其他点。因为每个点只会加入 \(O(\log n)\) 次。所以这样有 \(O(n\log n)\) 个支配对。

若把一组询问看作一个点 \((l,r)\),那么每个支配对的贡献就是矩形操作。考虑把 \(dep(\operatorname{lca}(i,j))\) 相同的支配对放到一起,那么就要求一些 2-side 矩形的并。

这可以经典的转化为 4-side 矩形加问题,然后用扫描线+树状数组解决。

时间复杂度 \(O(n\log^2+q\log n)\)

\(\text{IX}\). Luogu P7811 [JRKSJ R2] 你的名字

考虑根号分治:

  • \(k\le B\),直接暴力求出 \(a_i\bmod k\) 的值后做 RMQ。离线逐块处理可以做到线性空间,而时间是 \(O(nB+q\log n)\) 的。

  • \(k>B\),则枚举每一个 \(ik\),那么答案就是所有 \(ik\) 的后继模上 \(k\) 的值中最小的那个。用主席树可以做到 \(O(\frac{qV}{B}\log n)\),但不能通过。

    考虑将问题规约到求区间 \([l,r]\)\(x\) 的后继。

    考虑按 \(x\) 从大到小扫描,则问题变为带修 RMQ。注意到修改只有 \(O(n)\) 次,而查询有 \(O(\frac{qV}{B})\) 次,于是直接上底层分块的猫树即可。

    具体的,先将序列分块后再建猫树。每次修改时就重构所在块的信息并且重构猫树,查询是就直接在猫树上查。这样就可以做到 \(O(\sqrt n)-O(1)\) 的带修 RMQ。

    时间复杂度 \(O(n\sqrt n+\frac{qV}{B})\)

所以总时间复杂度为 \(O(n\sqrt n+q\log n+nB+\frac{qV}{B})\)。当 \(B=\sqrt{\frac{qV}{n}}\) 时取到最优时间复杂度 \(O(n\sqrt n+q\log n+\sqrt{nqV})\)

有亿点卡常。

\(\text{X}\). CF793F Julia the snail

可以发现一次询问走的每条绳子的下端是单调不降的,因为如果要走一次下降的,就可以回溯。

于是从小到大按 \(y\) 扫描,并维护每个点作为 \(x\) 的答案 \(f(i)\)。那么一条绳子 \((l_j,r_j)\) 就相当于把 \([1,l_j]\) 中满足 \(f(i)\ge l_j\)\(f(i)\) 修改为 \(r_j\)

这可以直接用势能线段树做,若不用改或只用改最大值就打标记,否则就递归下去。因为每次递归说明这段区间内值的个数至少会减一,而初始时最多有 \(O(n\log n)\) 个不同的值,所以时间复杂度是 \(O(n\log n)\) 的。

\(\text{XI}\). LuoguP6072 『MdOI R1』Path

先把 \(f(E(x,y))\) 变成 \(d_x\oplus d_y\),其中 \(d_x\)\(x\) 到根路径上边权的异或和。

注意到任意两条不交路径一定存在一个点,使得其中一条路径的两个端点都在其子树内,另一棵树的两个端点都在其子树外。证明直接取某条路径两个端点的 \(\operatorname{lca}\) 即可。

于是可以枚举那个点 \(u\),现在问题变成了询问点 \(u\) 子树内/外任选两点的 \(d\) 的异或和的最大值。

子树内是好求的,可以直接树上启发式合并,然后用 Trie 树查询最大异或和。

子树外就考虑找到 \(p,q\) 使得 \(d_p\oplus d_q\) 最大。那么不在 \(p,q\) 到根路径上的点的答案就是 \(d_p\oplus d_q\)

否则就是查询一条链。这样每个点只会被加入一次,也是用 Trie 树查询最大异或和。

时间复杂度 \(O(n\log^2n)\)

\(\text{XII}\). [TJOI2018] 异或

水题。直接树剖拆成 \(O(q\log n)\) 个区间,然后用可持久化 Trie 维护即可。

时间复杂度 \(O(q\log n\log V)\)

\(\text{XIII}\). LuoguP6072 『MdOI R1』Path

注意到一对不相交的路径一定存在一个点使得一条路径都在其子树内,另一条都在其子树外。

于是考虑分别求出子树内/外的 \(f(E(x,y))\)

子树内的可以用树上启发式合并+01Trie 容易地解决。

子树外的可以先找到 \(u,v\) 使得 \(f(E(u,v))\) 最大。那么只有 \(u,v\) 到根路径上的点的贡献不是 \(f(E(u,v))\)。此时只需查询一条链上的值,可以直接暴力加入。

时间复杂度 \(O(n\log n\log V)\)

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

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

相关文章

UE4 打包Android apk (32位and64位) 血与泪的教训

文章适用于UE4.27打包 安卓32/64位apk。 这两天用ue4打包安卓apk遇到了不少问题,吐血研究了一天,终于解决所有问题,完成打包。 环境要求 最好用Android Studio 4.0,一定不要用很高的版本,之后下载 NDK21.4.7075529、java8环境、SDK版本 Android10,0(API 29)、Android9.0(A…

springboot快速集成neo4j

1.导入坐标,我这里是springboot3.0.2<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-neo4j</artifactId></dependency> 2.写ymlspring:data:neo4j:database: neo4j:uri: bolt://localho…

使用kind快速搭建本地k8s集群

学科:云平台部署与搭建 姓名:田凯蕾 学号:23593115

SpringAI用嵌入模型操作向量数据库!

嵌入模型(Embedding Model)和向量数据库(Vector Database/Vector Store)是一对亲密无间的合作伙伴,也是 AI 技术栈中紧密关联的两大核心组件,两者的协同作用构成了现代语义搜索、推荐系统和 RAG(Retrieval Augmented Generation,检索增强生成)等应用的技术基础。PS:准…

QEMU、KVM和DPU的关系

QEMU、KVM 和 DPU 在现代虚拟化与云计算架构中扮演不同角色,通过协同工作实现高性能、低延迟的资源虚拟化与硬件加速。以下是它们的关系及协作方式:1. 角色定位组件 核心功能 层级QEMU 提供硬件设备模拟、虚拟机生命周期管理,支持跨平台虚拟化(如模拟 ARM 设备)。 用户态K…

Javascript - 2

Javascript - 2 事件 DOM DOM - document object model - HTML 文档的结构化表示 由浏览器自动创建,以 树结构存储,每一个 HTML 元素(标签、内容、属性)都是一个对象 DOM允许我们使用 js 访问 HTML 元素和样式,以操作它们改变文本 改变 HTML 属性 改变 CSS 样式可以通过 j…

【QML】定时时间控制控件

代码:1 import QtQuick 2.152 import QtQuick.Controls 2.153 4 ApplicationWindow {5 width: 5006 height: 3007 visible: true8 title: "飞行时间设置"9 10 // 自定义时间选择组件11 Component {12 id: timeComponent13 …

Ollama本地部署qwen2.5

一、概述 Ollama 是一个开源的本地大语言模型运行框架,专为在本地机器上便捷部署和运行大型语言模型(LLM)而设计。支持多种操作系统,包括 macOS、Windows、Linux 以及通过 Docker 容器运行。Ollama 提供对模型量化的支持,可以显著降低显存要求,使得在普通家用计算机上运行…

天下拍-艺术品拍卖经典案例分享

在当今快速发展的数字化时代,艺术品拍卖行业正经历着前所未有的变革。天下拍作为一款功能齐全的拍卖产品,凭借先进的技术平台和专业的服务团队,为艺术品拍卖提供了全新的解决方案。同步拍卖的模式和互联网运营工具的加持可以帮助您实现艺术品的高效变现和价值最大化。线上线…

[T.4] 团队项目:团队代码管理准备

项目 内容这个作业属于哪个课程 2025年春季软件工程(罗杰、任健)这个作业的要求在哪里 [T.4] 团队项目:团队代码管理准备我在这个课程的目标是 掌握代码管理与修复流程,完善团队协作机制这个作业在哪个具体方面帮助我实现目标 团队协作,软件开发代码管理基础团队代码仓库地…

asio使用async_connect,连接127.0.0.1,函数回调函数errorcode连接成功

编译运行rest_rpc库的客户端出现问题 asio使用async_connect,连接127.0.0.1,函数回调函数errorcode连接成功(没有启动服务器的情况下),需要等到调用发送函数,才会失败。调试发现是使用9000端口被本机另外的程序占用了-_- 环境:win10 netstat -ano | findstr "9000&…