D ToPTree
题目背景
ToPTree 即 **To**oth**P**aste **Tree**,它的工作方式就如同挤牙膏——挤一下它才动一下。
题目描述
你有 $n$ 个数组成的序列 $[a_1\sim a_n]$,初始时 $a_i=0$。
有 $q$ 次操作组成的操作序列 $A$,第 $i$ 次操作在所有可能的 $nN(n+1)$ 种操作之内均匀随机:
- 在以下两种操作之中以一半的概率随机选择一种操作,作为这次操作。
- 随机选取满足条件的正整数 $l,r,x\ (1\le l\le r\le n,1\le x\le N)$,把 $[l,r]$ 区间内的数加上 $x$。
- 随机选取满足条件的正整数 $l,r,x\ (1\le l\le r\le n,1\le x\le N)$,把 $[l,r]$ 区间内的数改为 $x$。
- 容易发现每次操作共有 $nN(n+1)$ 种可能。
由于这棵树是 ToothPaste Tree,只有在你询问的时候,它才会执行与你这次询问有关且还没执行的操作。具体地,假设你依次询问了 $a_{p_1\sim p_m}$ 的值,则
- 询问 $a_{p_i}$ 时,把所有 $A$ 中与这个数有关的操作(即这次操作的 $[l,r]$ 包含 $p_i$)按时间顺序(即按 $A$ 中的顺序)执行了,并从 $A$ 中删除它们。然后输出 $a_{p_i}$ 当前的值。
> 比如 $A$ 中目前按顺序有以下四个操作,且 $a$ 中所有元素目前都是 $0$:
>
> 1. 给区间 $[2,3]$ 加一。
> 2. 给区间 $[3,4]$ 加一。
> 3. 把区间 $[2,4]$ 赋值为一。
> 4. 给区间 $[2,3]$ 加一。
>
> 现在询问了 $a_2$ 的值,那么操作 $1,3,4$ 会被顺序执行,导致 $a_1\sim a_4$ 分别变为 $[0,2,2,1]$。因此 ToPTree 输出 $2$。操作序列变为:
>
> 1. 给区间 $[3,4]$ 加一。
>
> 再询问 $a_3$ 的值,操作 $1$ 会被执行,导致操作序列变为空,并且 $a_1\sim a_4$ 变为 $[0,2,3,2]$,故输出 $3$。注意这个输出结果与按照顺序执行所有操作 $1\sim 4$ 得到的结果并不一致。
给定 $n,m,q,N$ 以及序列 $p$,ToPTree 一共会按询问顺序输出 $m$ 个值,求这 $m$ 次输出分别的期望,对 $998244353$ 取模。
(第一次询问之前,没有任何操作被执行了。)
输入输出格式
输入格式
第一行四个正整数 $n,m,q,N$。
接下来一行 $m$ 个正整数 $p_1\sim p_m$。
输出格式
输出一行 $m$ 个非负整数,用空格隔开,为答案,对 $998244353$ 取模。
输入输出样例
输入样例 #1
2 2 2 2
1 1
输出样例 #1
665496237 665496237
说明
**【数据范围】**
**本题采用捆绑测试。**
对于所有数据:$1\le n,N,q\le 9\times 10^8$,$1\le m\le 10^6$,$1\le p_i\le n$。详细数据范围如下:
- Subtask #1 (4 pts): $n,m,q,N\le 3$。
- Subtask #2 (10 pts): $n,m,q,N\le 5$。
- Subtask #3 (3 pts): $n=1$,$m,q\le 123456$。
- Subtask #4 (3 pts): $q=1$,$m\le 123456$。
- Subtask #5 (12 pts): $m=1$,$q\le 123456$。
- Subtask #6 (27 pts): $n,m,q,N\le 50$。
- Subtask #7 (9 pts): $m,q\le 5000$。
- Subtask #8 (16 pts): $m,q\le 123456$。
- Subtask #9 (16 pts): 没有任何附加限制。