A5922 | 「ZJOI2020」传统艺能
时间限制4s
内存限制512MB
通过 / 提交0/0
题目描述
Bob 喜欢线段树。
众所周知,ZJOI 的第二题有很多线段树。
Bob 有一棵根为 $[1, n]$ 的**广义线段树**。Bob 需要在这个线段树上执行 $k$ 次区间**懒标记**操作,每次操作会等概率地从 $[1, n]$ 的所有 $\frac{n(n+1)}2$ 个子区间中随机选择一个。对于所有在该次操作中被访问到的非叶子节点,Bob 会将这个点上的标记下推;而对于所有叶子节点(即没有继续递
归的节点),Bob 会给这个点打上标记。
Bob 想知道,$k$ 次操作之后,有标记的节点的期望数量是多少。
#### 具体定义
**线段树**:线段树是一棵每个节点上都记录了一个线段的二叉树。根节点记录的线段是 $[1, n]$。
对于每个节点,若它记录的线段是 $[l, r]$ 且 $l\neq r$,取 $m = \lfloor \frac{l+r}2 \rfloor$,则它的左右儿子节点记录的线段分别是 $[l,m]$ 和 $[m + 1, r]$;若 $l = r$,则它是叶子节点。
**广义线段树**:在广义的线段树中,$m$ 不要求恰好等于区间的中点,但是 $m$ 还是必须满足 $l\le m < r$ 的。不难发现在广义的线段树中,树的深度可以达到 $O(n)$ 级别。
线段树的核心是**懒标记**,下面是一个带懒标记的广义线段树的伪代码,其中

注意,在处理叶子节点时,一旦他获得了一个标记,那么这个标记会一直存在。
你也可以这么理解题意:有一棵广义线段树,每个节点有一个 $m$ 值。一开始
最后所有
众所周知,ZJOI 的第二题有很多线段树。
Bob 有一棵根为 $[1, n]$ 的**广义线段树**。Bob 需要在这个线段树上执行 $k$ 次区间**懒标记**操作,每次操作会等概率地从 $[1, n]$ 的所有 $\frac{n(n+1)}2$ 个子区间中随机选择一个。对于所有在该次操作中被访问到的非叶子节点,Bob 会将这个点上的标记下推;而对于所有叶子节点(即没有继续递
归的节点),Bob 会给这个点打上标记。
Bob 想知道,$k$ 次操作之后,有标记的节点的期望数量是多少。
#### 具体定义
**线段树**:线段树是一棵每个节点上都记录了一个线段的二叉树。根节点记录的线段是 $[1, n]$。
对于每个节点,若它记录的线段是 $[l, r]$ 且 $l\neq r$,取 $m = \lfloor \frac{l+r}2 \rfloor$,则它的左右儿子节点记录的线段分别是 $[l,m]$ 和 $[m + 1, r]$;若 $l = r$,则它是叶子节点。
**广义线段树**:在广义的线段树中,$m$ 不要求恰好等于区间的中点,但是 $m$ 还是必须满足 $l\le m < r$ 的。不难发现在广义的线段树中,树的深度可以达到 $O(n)$ 级别。
线段树的核心是**懒标记**,下面是一个带懒标记的广义线段树的伪代码,其中
tag 数组为懒标记:
注意,在处理叶子节点时,一旦他获得了一个标记,那么这个标记会一直存在。
你也可以这么理解题意:有一棵广义线段树,每个节点有一个 $m$ 值。一开始
tag 数组均为 $0$,Bob 会执行 $k$ 次操作,每次操作等概率随机选择区间 $[l, r]$ 并执行 MODIFY(root, 1, n, l, r);。最后所有
Node 中满足 tag[Node] = 1 的期望数量就是需要求的值。输入格式
第一行输入两个整数 $n, k$。
接下来输入一行包含 $n − 1$ 个整数 $a_i$:按照**先序遍历**的顺序,给出广义线段树上所有非叶子节点的划分位置 $m$。你也可以理解为从只有 $[1, n]$ 根节点开始,每次读入一个整数后,就将当前包含这个整数的节点做一次拆分,最后获得一棵有 $2n − 1$ 个节点的广义线段树。
保证给定的 $n − 1$ 个整数是一个排列,不难发现通过这些信息就能唯一确定一棵 $[1, n]$ 上的广义线段树。
接下来输入一行包含 $n − 1$ 个整数 $a_i$:按照**先序遍历**的顺序,给出广义线段树上所有非叶子节点的划分位置 $m$。你也可以理解为从只有 $[1, n]$ 根节点开始,每次读入一个整数后,就将当前包含这个整数的节点做一次拆分,最后获得一棵有 $2n − 1$ 个节点的广义线段树。
保证给定的 $n − 1$ 个整数是一个排列,不难发现通过这些信息就能唯一确定一棵 $[1, n]$ 上的广义线段树。
输出格式
输出一行一个整数,代表期望数量对 $p = 998244353$ 取模后的结果。即,如果期望数量的最简分数表示为 $\frac ab$,你需要输出一个整数 $c$ 满足 $c\times b \equiv a \pmod p$。
输入输出样例
输入 #1
3 1 1 2
输出 #1
166374060
输入 #2
5 4 2 1 3 4
输出 #2
320443836
| 测试点 | $n$ | $k$ | 其他约定 |
| :----: | :----------: | :-------: | :---------------------------------: |
| $1$ | $\le 10$ | $\le 4$ | |
| $2$ | $\le 10$ | $\le 100$ | |
| $3$ | $\le 5$ | | |
| $4$ | | $=1$ | |
| $5$ | $=32$ | | 输入的线段树为完全二叉树 |
| $6$ | $=64$ | | 输入的线段树为完全二叉树 |
| $7$ | $=4096$ | | 输入的线段树为完全二叉树 |
| $8$ | $\le 5000$ | | 每个 $m$ 均在 $[l, r-1]$ 内均匀随机 |
| $9$ | $\le 100000$ | | |
| $10$ | | | |
对于 $100\%$ 的数据,$1\le n\le 200000, 1\le k\le 10^9$。
| :----: | :----------: | :-------: | :---------------------------------: |
| $1$ | $\le 10$ | $\le 4$ | |
| $2$ | $\le 10$ | $\le 100$ | |
| $3$ | $\le 5$ | | |
| $4$ | | $=1$ | |
| $5$ | $=32$ | | 输入的线段树为完全二叉树 |
| $6$ | $=64$ | | 输入的线段树为完全二叉树 |
| $7$ | $=4096$ | | 输入的线段树为完全二叉树 |
| $8$ | $\le 5000$ | | 每个 $m$ 均在 $[l, r-1]$ 内均匀随机 |
| $9$ | $\le 100000$ | | |
| $10$ | | | |
对于 $100\%$ 的数据,$1\le n\le 200000, 1\le k\le 10^9$。
C++ 编辑器
输入
输出
可保存默认模板;新题优先使用已保存模板。
当前快捷键仅展示,暂不支持修改。
- 撤销
Ctrl / ⌘ + Z - 重做
Ctrl / ⌘ + Y - 查找
Ctrl / ⌘ + F - 全选
Ctrl / ⌘ + A - 复制
Ctrl / ⌘ + C - 剪切
Ctrl / ⌘ + X - 粘贴
Ctrl / ⌘ + V - 自动排版
工具栏排版按钮 - 草稿保存
编辑时自动保存到本机
历史
提交记录
状态说明时间源码
AI
作答助手
你好,我是作答助手。可以问思路、复杂度、样例含义或代码报错原因;不会直接给出完整 AC 代码。
确定要清空代码吗?