摘要:
题目给定长度为 $n$ 的序列,有 $q$ 次询问,每次询问区间 $[l,r]$ 的最短子区间 $[l',r']$,使 $[l,r]$ 中出现的数都在 $[l',r']$ 中出现,需输出 $[l',r']$ 的长度,$1\leq n,q\leq 2\times 10^6$,$1\leq a_i\leq n$。解题思路上,先有 $O(n^2)$ 的双指针暴力法。题解采用扫描右端点 $p$ 的方法,用数据结构维护右端点为 $p$ 时每个下标 $k$ 代表后缀的最小合法前缀 $f_k$,找出 $a_p$ 上一次出现位置 $la_p$,将询问的 $l$ 落在 $(la_p,p]$ 区间的 $f$ 对 $p$ 取 $\max$,使用并查集让 $la_p$ 指向 $la_p +1$ 以找到最大合法数据左端点 $d$。还可将问题类比二维偏序问题,转化为维护每个后缀点对权值来求解,因数据点权值维护需按顺序,所以按第二维一定顺序扫描。代码中用 zkw 线段树处理,添加了快读以优化。 阅读全文
posted @ 2025-02-14 20:33
wing_heart
阅读(21)
评论(0)
推荐(0)
摘要:
题目给定一棵 $n$ 个点($n\leq 8000$)的无根树,每个点有取值范围 $[l_i,r_i]$,要求选择某些点染成特殊点,计算满足所有点离距离它最近的特殊点的距离 $\in [l_i,r_i]$ 的染色方案数,空间限制 $128M$。解题采用 $O(n^2)$ 的树形 DP,设状态 $f_{i,j,0/1}$ 表示点 $i$ 距离最近的特殊点距离是 $j$ 且该点在子树内/外,转移时逐个加入儿子考虑,因相邻点距离最近特殊点距离相差不超 $1$,每个状态有 $O(1)$ 种转移。为满足空间要求,借鉴 dsu on tree 思想,先搜重儿子再搜轻儿子,轻儿子最多跳 $\log$ 次,使空间复杂度降为 $O(n \log n)$。 阅读全文
posted @ 2025-02-14 19:06
wing_heart
阅读(2)
评论(0)
推荐(0)

浙公网安备 33010602011771号