数据结构杂题选做
好像数据结构也没什么专项,那就全塞一起吧(大雾
好像wind_whisper神仙今天留的题也没什么专项。
P1972 [SDOI2009] HH的项链
居然没做过的“经典题”++。怎么到处都是经典题捏
一个区间内的相同颜色可以只考虑最右边的那个。把询问离线按右端点排序,每次遇到同一颜色 再次出现,则 ,即删除上一次的贡献。
那么一边维护一边更新答案,答案就是 的区间和。
P4113 [HEOI2012]采花
题意大概是数区间内出现超过 次的颜色数。采取上题的方法,同时记录 和 ,在加入新颜色时撤销掉 的贡献。那这样求出来的答案是 大于2次颜色数*2+只有一次颜色数。
于是再维护一个原版的区间颜色数,把它们相减一下就好了qwq
P5327 [ZJOI2019]语言
撞上了前几天学线段树合并做的例题,好诶() 当时没写博客,顺路来补个档qwq
树上路径覆盖问题,首先考虑树上差分。把一次“普及语言”拆成从节点到根的单点修改。
考虑这样一个性质:对于树上按 序排列的点集 ,它们构成连通块(?)的边数是 (我不知道是不是这么叫
依旧感性证明一下:因为已经把点按 序排列,上述柿子的路径并就经过联通块上的每条边恰好两次。
这个东西是可以线段树维护的。至于怎么合并两个区间,还需记录区间内最靠左/最靠右的点。
注意就是 不用维护进去 不然咋合并,于是线段树的问题解决了。当前线段树根节点的值就是子树内能与 共通语言的人数。
把整棵线段树往上传递,线段树合并一下就好了。
写了一上午,不难理解但真的难调。
P3960 [NOIP2017 提高组] 列队
这题 wzh 老师讲过诶。可是他讲的时候我连树状数组都还不会诶。
把每行分成两部分,原来就在本行的数,新加入本行的数。
对于前一部分,记录前面已经删除了几个数可处理出答案,后一部分用树状数组维护。再单独维护最右边的一列。
由于只有 次询问,那么树状数组的总长度为 。
至于如何维护:删除时,把对应位置的值赋为 ,把插入位置赋为 。那么在树状数组上二分,前缀和为 的位置就是当前第 个数。
比上一题还难调/qd
P3313 [SDOI2014]旅行
树剖+动态开点线段树。
对于每种颜色开一棵线段树维护区间和/最大值,空间存不下,所以动态开点。
本文来自博客园,作者:樱雪喵,转载请注明原文链接:https://www.cnblogs.com/ying-xue/p/16986096.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】