lxl 海亮讲课

例题1:非公开题目

题意

每个位置上有一个容量为 \(b_i\) 的背包,每次插入物品超过容量会弹出最早的物品。

两种操作:

  • \([l,r]\) 都插入大小为 \(x\) 的物品
  • 查询 \(p\) 位置背包有多少物品

做法

化成二维平面 时间-序列。顺着序列方向做扫描线,用线段树维护所有时间上增加的物品,每次查询线段树上二分出一个后缀即可。

值域倍增分块(分组)

\(\log\) 复杂度的均摊。

可以解决一些值域相关的区间问题。

例题2:洛谷 P7447

将值域分为 \([2^0,2^1)\), \([2^1,2^2)\), …, \([2^{k-1},2^k)\)\(\log n\) 块。每个块用普通线段树维护 summaxmin。每次操作:

  • 对于不包含 \(x\) 的大于 \(x\) 的块,不断找出块的 \(\min\) 放到下面的块直到 \(\min\) 不会因 \(-x\) 被放到下面的块。
  • 对包含 \(x\) 的块不断把上方 \(\max\) 往下放直到 \(\max \le x\)\(\max >x\) 的一定会往下放,因为它被减去了一半以上)。

例题3:CF1515I Phoenix and Dimonds

注意同种钻石不能拆分。

对价值进行分块,按 \(c\) 价值从大到小处理。用线段树二分出能取得的最多钻石总数,然后往下跳。

具体细节不清楚。

线段树维护括号匹配

例题4:QOJ #8227. PKUWC2024D2T3 栈

化为 时间-位置 二维平面关于位置做扫描线。

把栈问题转换为括号匹配(可孤立右括号版)。

Trick. lxl:括号序列/栈问题能差分成后缀的一定要差分。不要查区间。查区间必死(复杂度会爆,检查,但也有做法参见P6781)。 要维护已被匹配的括号的总和。

从一个点出发保留区间的连通块

洛谷 P5311 [Ynoi2011] 成都七中

假设 x 不变化。于一个 x,与之联通的点 p 满足:p到x的路径上 \(l\le min,r\ge max\) 。将一条路径的min和max放到二维平面上,则一个 l,r 会查询一个右上角的 2-side 矩形中不同元素个数。

那么我们把询问变成点,然后对于每种颜色,统计它们贡献到的询问,也就是它们左下方矩形包含询问的并的大小。

2-side矩形(1/4矩形)的并集 -> 4-side矩形的和;我们单调队列切分为若干不重复的块即可。

如果 x 变化,做一个淀粉质。若对于一次询问,x与当前重心联通,则把重心当做 x 做这个问题,否则只需递归进入 x 所在子树内计算答案即可。

总的来说:

  • \(x\) 与当前重心联通,统计颜色在矩形 \([l, +\infty) \times (-\infty, r]\) 内的出现次数。
  • 复杂度 \(\mathcal{O}(n \log^2 n)\),空间 \(\mathcal{O}(n)\)

例题:未公开题目

一棵树,每个点有颜色,每次查询只保留某种颜色的点的情况下,连通块大小。(?

没听见。

支配集类题目

image

image

P8528 [Ynoi2003] 铃原露露

CodeChef MINXORSEG

image

未公开题目

给定长为 \(n\) 的序列 \(a\) 和正整数 \(d\),定义一个区间 \([l,r]\) 是好的,当且仅当 \(a_l\dots a_r\) 升序排列后相邻两数之差不超过 \(d\)。现有 \(q\) 次询问,每次给定 \(L,R\),问有多少 \([L,R]\) 的子区间 \([l,r]\subset[L,R]\) 是好的.

定义差小于等于 d 的两个数是联通的。因为不是树,不能用点点边法。用代表元法,以一个数代表一个连通块。

P7126 [Ynoi2008]rdCcot & THUWC2020 某科学的动态仙人掌

注意到同一个 C块 往上跳 c/2 次一定会跳到同一个点,我们以这个点为代表元。

考虑画一个数轴。
image

image

例题

image

P11695

posted @ 2025-02-19 09:24  Luke_li  阅读(23)  评论(0)    收藏  举报