• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
Augenstern-
博客园    首页    新随笔    联系   管理    订阅  订阅
2025.9.9 树套树 + 分治 刷题日记

1.

P5522 [yLOI2019] 棠梨煎雪

我是菜*

看到题目什么都想不出来

然后写的两个老哥的暴力

具体就是用树状数组维护每一位 0/1

查询时取出每一位的 0/1 个数,分情况算贡献

60 倍常数的树状数组怎么你了

1 只老哥的做法如下

\(n\) 只有 \(30\) 直接状压 想不到我就是菜

然后我们只能存下 \(2\) 进制 \(30\) 位

考虑 将一个原串存两个二进制串,一个是每一位是否确定的,一个是每一位是否确定为 1 的

设这两个串为 \(uk\) 和 \(fir\)

如果两个串 $ uk_x $ & $ uk_y $ & (\(fir_x\) ^ \(fir_y\)) 不为 0

说明无解

否则 根据 \(uk\) 或起来的一的位的个数就能判断答案

用发现区间信息可合并,用线段树维护即可

码

2.

P3759 [TJOI2017] 不勤劳的图书管理员

昨天刚写过板子

这不是一样吗

然后 \(qkhm :\) 这题两颗树

我 : ? , 哪里

... 确实两颗

然后卡空间,把泷泷弃掉即可

码

3.

P7482 不条理狂诗曲

当我知道她是序列分治的时候,其实已经完了

其实一看这题就想到一只 DP,可以写暴力

考虑跨区间贡献

发现如果用 DP 拼接,就 \(mid\) 处有点问题

那我们相当于是在左边不去边界和右边不取中取最大值

即 \(max(f_l + g_r , f_r + g_l)\)

直接移项 ,序列分治 , 可

4.

P6406 [COCI 2014/2015 #2] Norma

比较模版的序列分治

直接化一下柿子(把和左右端点分别有关的分类),然后前缀和优化

码

5.

P12624 [ICPC 2025 NAC] Humans vs AI

人机如果要改肯定贪心改最大的

可以列出一个和最大值以及区间和有关的柿子

直接序列分治加动态开点线段树会 T

原因是前缀和值域很大

如果你把柿子化的时候像我一样拆成 \(sum[l ~ mid]\) 和 \(sum[mid ~ r]\) 就会比较难受

因为和每次分治的中点 \(mid\) 有关,较难离散化

难道要提前跑一遍

其实把区间和化成差分的形式就好了

直接离散化,稳过

话说我把值域开小没WA还过了无离散化

当然不建议像我这样主要是懒得改柿子了

6.

P10833 [COTS 2023] 下 Niz

这题刚开始以为是这题的经验

粘过来改了改

结果WA

手模样例发现端倪,原来有重的

以为很难,想了一会

想到如下做法:

分治,枚举最大值

然后就知道了子序列的长度 = 最大值

指针扫不重的最大右边界,然后判断是否合法即可

码、

7.

P7475 「C.E.L.U-02」简易输入法

在 \(tire\) 上匹配,然后就变成了区间第 \(k\) 小,直接上树套树即可,两只 log

但这题有更好写且复杂度更优的做法

官解

在 \(tire\) 树每个节点维护一颗平衡树

在平衡树里维护这颗子树内的串的信息

众所周知字符串比较是 \(O(n)\) 的

由于串本身不修改

所以我们可以先给串从大到小排序,然后依次赋编号表示大小

然后出现次数我们可以 \(<< 32\) 加到编号上

这样信息就被我们压缩到了 1 个 \(long\) \(long\)

复杂度 \(O(10 \times n log_n)\)

posted on 2025-09-09 14:28  初绘  阅读(9)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3