上一页 1 ··· 4 5 6 7 8 9 下一页
摘要: 分析 对于区间问题,考虑莫队。 和这个一样转化问题。 把树变成 DFS 序之后,在序列上询问区间就是普通莫队模板了。用 set 记录当前区间里存放的有序 \(x'\)。移动完指针之后的判断是否存在就直接在 set 里二分。复杂度虽然大了不止一点,但是 \(3\) 秒还是能过的。没有压力。 代码 #i 阅读全文
posted @ 2024-03-07 13:01 harmis_yz 阅读(24) 评论(0) 推荐(0)
摘要: 分析 先考虑 \(k=n\) 的情况。 对于 \(s_j=M\) 的时候,其能够匹配的 \(s_i=D\) 的数量很显然是 \(i \le j-1\) 的时候的数量,求前缀和就能得到。而对于 \(s_j=C\) 的时候,能够完整匹配的就是 \(i \le j-1\) 的时候所有 \(s_i=M\) 阅读全文
posted @ 2024-03-07 13:00 harmis_yz 阅读(34) 评论(0) 推荐(0)
摘要: 分析 \(1 \le N \le 17\),一眼状压。 定义 \(f_{s,i}\) 表示从 \(1\) 走到 \(i\),且经过点的状态为 \(s\) 的最小代价。不难推出转移方程:\(f_{s+2^{j-1},j}=\min(f_{s,i}+val_{i,j})\)。其中 \(val_{i,j} 阅读全文
posted @ 2024-03-07 12:59 harmis_yz 阅读(23) 评论(0) 推荐(0)
摘要: 分析 考虑启发式合并。 统计 \(cnt_{i,j}\) 表示在 \(i\) 这个集合中,是 \(j\) 班的人数。\(id_{i}\) 表示 \(i\) 所在集合下标。根据启发式合并模板,在保证是小集合往大集合合并的情况下,将每个小集合元素 \(x\) 所在的班级都在大集合的 \(cnt\) 里增 阅读全文
posted @ 2024-03-07 12:58 harmis_yz 阅读(54) 评论(0) 推荐(0)
摘要: 分析 考虑状压。 定义状态函数 \(f_{i,j}\) 表示在得到 \(C\) 出现过的状态为 \(i\) 且排列末尾为 \(j\) 时的最小代价。则有转移方程:\(f_{i,j}=\min\{f_{i',k}+dis_{k,j}\}\),保证 \(i'\) 表示集合属于 \(i\)。\(dis_{ 阅读全文
posted @ 2024-03-05 19:04 harmis_yz 阅读(38) 评论(0) 推荐(0)
摘要: 分析 考虑枚举。 注意到第二个条件是必须要有 $25$ 个字符在里面出现过,故考虑枚举唯一没出现过的字符 $k$,然后再枚举 $s_i$。 令 $cnt_{i,j}$ 表示 $s_i$ 中字符 $c$ 出现的奇偶性。如果有字符 $c \ne k \land cnt_{i,c}=0$,则在 $s_j$ 阅读全文
posted @ 2024-03-05 19:04 harmis_yz 阅读(24) 评论(0) 推荐(0)
摘要: 比 E 简单。 分析 考虑暴力 DP。 定义状态函数 $f_i$ 表示最后一个黑点为 $i$ 时的方案数,有:$f_i =\sum\limits_{j=1}^{i-1}f_j[(i-j)\bmod val_j =0]$。不难发现在使用刷表法的时候,转移代码: for(re int j=1;i+val 阅读全文
posted @ 2024-03-05 19:03 harmis_yz 阅读(73) 评论(0) 推荐(0)
摘要: 分析 一眼分块。 用值域分块来维护。先把所有的值离散化,使得至于不大于 $n+q$。统计一下每个值的数量,每个块包含值的数量,每个块的价值和。修改值的时候先把原来值的数量,块包含的数量,块的价值剪掉被修改值的贡献,然后在新的值上面更新。修改数量直接改数量的变化贡献即可。 找前 $x$ 大的值之和从值 阅读全文
posted @ 2024-03-05 19:01 harmis_yz 阅读(34) 评论(0) 推荐(0)
摘要: 分析 乱搞题。 $1 \le n,m \le 10^5$ 的时候就可以考虑乱搞了。 发现每次操作 $1$ 都会把上一次的操作 $1$ 覆盖掉,那么第 $i$ 个询问时树的颜色情况就是由前 $1$ 个操作 $1$ 决定。也就是说这个询问的内容变成了:在 $x$ 为根的子树中,深度不小于 $x'$ 的节 阅读全文
posted @ 2024-03-05 19:01 harmis_yz 阅读(115) 评论(0) 推荐(0)
摘要: 分析 线段树。 每个节点维护两个值:$s[l\dots r]$ 和 $s[r \dots l]$。判断字串是否是回文直接就是询问的答案维护出来的两个值是否相同。 首先想到用线段树暴力维护。第一个值很显然是两个儿子的第一个值加起来,第二个值是反着加起来。得到很酷的代码: il void up(int 阅读全文
posted @ 2024-03-05 18:57 harmis_yz 阅读(72) 评论(0) 推荐(0)
上一页 1 ··· 4 5 6 7 8 9 下一页