lxl数据结构讲义例题泛做

搬运自洛谷博客,原发表时间:2022-12-06

网课人在家摆烂太悲伤了,于是做一些数据结构题。

本博客和ds学习笔记的区别:后者收录小清新/有趣题。

目前拥有的讲义:

感觉数据结构题评紫的巨大多,良莠不齐。

可能会有非常简单的题加入这里,勿喷。

完成度指数:0%表示一半以上核心代码照着题解完成;100%表示完全独立完成。

P8511 [Ynoi Easy Round 2021] TEST_68

tag:树上问题

题意:一棵树,对于每个节点求其子树以外的任何两节点的最大异或和。

首先考虑整棵树,求出其最大异或和 \(bst\),及得到该数的两点 \(x,y\)

显然非 \(x\)\(y\) 的祖先的所有节点的答案即为 \(bst\)

考虑 \(x\)\(y\) 的祖先:自顶向下,每次就增加了一定的点,分别对两条路径求最大异或和。

总时间复杂度 \(O(n \log a)\)\(a\) 为值域。

完成度:60%

P4396 [AHOI2013]作业

tag:莫队&分块

明显的莫队,使用树状数组 \(O(\log n)-O(\log n)\) 维护,时间复杂度 \(O(n \sqrt{m} \log n)\),很笨。

注意到修改/查询的次数为 \(O(n \sqrt m)-O(m)\),可以采用 \(O(1)-O(\sqrt n)\) 的数据结构维护。

值域分块满足上述要求。

时间复杂度 \(O(n \sqrt{m}+m \sqrt{a})\)\(a\) 为值域。

完成度:100%

P5356 [Ynoi2017] 由乃打扑克

tag:分块

题意:区间加,区间第 \(k\) 小。

分块,块内排序。(排序后的数组最好附带一个原数组的编号)

(以下 \(L\) 表示块长)

  • 区间加

整块打 \(\text{tag}\),散块中挑出区间内的数(有序),修改后和剩下的数归并排序得到整块的有序数组。

时间复杂度为 \(O(L+\dfrac{n}{L})\)

  • 区间第 \(k\)

散块通过归并排序为一组,一整块单独为一组。值域中二分答案,在每组中求出大于其的个数,判断加起来后是否达到 \(k\) 即可。

时间复杂度 \(O(\Delta\dfrac{n}{L} \log L)\)\(\Delta\) 表示二分次数。

理论上取 \(L=O(\sqrt{n} \log n)\) 较优。

卡常技巧:根据块内最值求出二分上下界,能带来较大常数优化。

写得非常丑陋的code

想+写+调了总计2.5h,吐了。

完成度:80%

P3863 序列

tag:扫描线&分块

题意:区间加,查询某个位置在过去的多少时间内不小于某个值。

离线扫描线扫序列维,数据结构维护时间维。

将区间加拆为在 \(l\) 处加上 \(v\),在 \(r+1\) 处减去 \(v\),拆完后的修改对 \([t,m]\) 有贡献,问询即为新序列中 \([0,t-1]\)\(\ge y-a_p\) 的数量。(\(t\) 为时间戳)

于是转化为区间加区间rank,使用分块可以在 \(O(n \sqrt{n \log n})\) 内解决,可以通过。

(或者分块套值域分块,\(O(n \sqrt n)\),作者懒得写了)

完成度:60%

P4887 【模板】莫队二次离线(第十四分块(前体))

tag:莫队

题意:求区间内异或起来有 \(k\) 个二进制位的二元组个数。

莫二离的本质:\(O(n \sqrt{m} \Delta) \rightarrow O(n \sqrt{m}+n \Delta)\)\(\Delta\) 为单次挪动指针的复杂度。

适用范围:\(\Delta > O(1)\),一个数的对区间的贡献与区间中的数有关,贡献可差分

\(f(x,l,r)\)\(a_x\) 对区间 \([l,r]\) 的贡献,\(F(x,l)=f(x,1,l)\)。(区间转化为前缀差分)

在右指针移动到 \(x\) 时,会产生的答案变动为 \(f(x,l,x-1)=F(x,x-1)-F(x,l-1)\)

在左指针移动到 \(x\) 时,会产生的答案变动为 \(f(x,x+1,r)=F(x,r)-F(x,x)\)

\(F(x,x-1),F(x,x)\) 可预处理;由于莫队指针移动的连续性,可以将连续的 \(-F(x,l-1)\)\(F(x,r)\) 记录在区间中,二次计算。(也就是二次离线)

而指针的移动对后续询问都有贡献,因此求前缀和后才是真正的答案。

完成度:0%

P5047 [Ynoi2019 模拟赛] Yuno loves sqrt technology II

tag:莫队&分块

题意:区间逆序对数。

莫二离,使用值域分块维护二次计算。(与上题类似,略过)

调一下块长就能过。

完成度:60%

P3245 [HNOI2016]大数

tag:莫队

题意:一个数字串,求区间中可被 \(p\) 整除的子串的个数。

明显可以转化为后缀串做差,离散化后就变成了小Z的袜子。特判一下2和5即可。

完成度:80%

posted @ 2025-02-06 23:17  孤独的电磁场  阅读(73)  评论(0)    收藏  举报