「KDOI-03」还原数据
题目描述
小 E 正在做一道经典题:
给定一个长度为 $n$ 的序列 $a$ 和 $q$ 个操作,操作共有 $2$ 种类型:
+ $\tt{1~l~r~x}$:对于所有 $l\le i\le r$,$a_i\leftarrow a_i+x$。
+ $\tt{2~l~r~x}$:对于所有 $l\le i\le r$,$a_i\leftarrow \max(a_i,x)$。
题目要求输出所有操作结束后的最终序列 $a'$。
小 E 迅速写了一份代码提交,但是发现,由于宇宙射线的影响,输入数据出现了一些小问题。具体地,对于所有 $2$ 操作,操作中给出的 $x$ 均被丢失了,也就是说,输入数据中的 $2$ 操作只剩下了 $\tt{2~l~r}$。输出数据则没有问题。小 E 现在想要通过剩余的数据恢复原来的输入数据,请你帮助他完成这个任务。
当然,可能会有多种合法的输入数据,你需要找到其中任意一种。数据保证有解。
输入输出格式
输入格式
从标准输入读入数据。
**本题有多组测试数据。**
第一行一个正整数 $T$,表示数据组数。
对于每组测试数据,第一行两个非负整数 $n,q$。
第二行 $n$ 个整数,表示初始序列 $a_1,a_2,\ldots,a_n$。
接下来 $q$ 行,每行一次操作,形如 $\tt{1~l~r~x}$ 或 $\tt{2~l~r}$。
接下来一行 $n$ 个整数,表示最终序列 $a_1',a_2',\ldots,a_n'$。
输出格式
输出到标准输出。
**本题开启自定义校验器(Special Judge)。**
对于每组测试数据,设共有 $q_2$ 个 $2$ 操作,输出一行 $q_2$ 个整数,第 $i$ 个整数表示第 $i$ 次 $2$ 操作中所给出的 $x$ 的值。
你需要保证 $-10^{15}\le x\le 10^{15}$。
输入输出样例
输入样例 #1
1
5 3
1 2 3 4 5
2 3 5
1 3 4 2
2 1 1
20 2 5 6 5
输出样例 #1
3 20
说明
**【样例 1 解释】**
所有合法输出需要满足:第 $1$ 个数 $\le3$,第 $2$ 个数恰好为 $20$。
**【样例 2】**
见选手文件中的 `restore/restore2.in` 与 `restore/restore2.ans`。
**【样例 3】**
见选手文件中的 `restore/restore3.in` 与 `restore/restore3.ans`。
***
**【数据范围】**
记 $q_2$ 为单组数据内 $2$ 操作的个数,$\sum n$ 为单个测试点内所有 $n$ 的和,$\sum q$ 为单个测试点内所有 $q$ 的和。
对于 $20\%$ 的数据,保证 $n,q\le50$,$\sum n,\sum q\le1~000$。
对于 $40\%$ 的数据,保证 $n,q\le1~000$,$\sum n,\sum q\le10^5$。
对于另外 $20\%$ 的数据,保证 $l=1,r=n$。
对于另外 $20\%$ 的数据,保证 $q_2\le100$。
对于 $100\%$ 的数据,保证 $1\le T\le 100$,$1\le n,q\le 10^5$,$1\le\sum n,\sum q\le 3\times10^5$,$-10^9\le a_i,x\le 10^9$,$-10^{15}\le a_i'\le10^{15}$, $q_2\ge1$。
***
**【校验器】**
本题样例文件较大,无法在附件中下载,请在选手文件中查看。
为了方便测试,在 $\texttt{restore}$ 目录下我们下发了 $\texttt{checker.cpp}$ 文件。你可以编译该文件,并使用它校验自己的输出文件。请注意它与最终评测时所用的校验器并不完全一致,你不需要也不应该关心其代码的具体内容。
编译命令为:
```plain
g++ checker.cpp -o checker -std=c++14
```
使用方式为:
```
./checker <inputfile> <outputfile> <answerfile>
```
校验器可能会返回以下状态中的其中一种:
+ $\tt{Accepted}$:表示你的输出完全正确。
+ $\tt{Wrong~answer~at~testcase~ x}$:表示你的输出在第 $x$ 个测试数据出错。
***
**【提示】**
本题输入输出量较大,推荐使用较快的输入输出方式。
KDOI 出题组温馨提示:**多测不清空,爆零两行泪。**