#P8862. 「KDOI-03」还原数据

「KDOI-03」还原数据

题目描述

小 E 正在做一道经典题:

给定一个长度为 nn 的序列 aaqq 个操作,操作共有 22 种类型:

  • 1 l r x\tt{1~l~r~x}:对于所有 lirl\le i\le raiai+xa_i\leftarrow a_i+x
  • 2 l r x\tt{2~l~r~x}:对于所有 lirl\le i\le raimax(ai,x)a_i\leftarrow \max(a_i,x)

题目要求输出所有操作结束后的最终序列 aa'

小 E 迅速写了一份代码提交,但是发现,由于宇宙射线的影响,输入数据出现了一些小问题。具体地,对于所有 22 操作,操作中给出的 xx 均被丢失了,也就是说,输入数据中的 22 操作只剩下了 2 l r\tt{2~l~r}。输出数据则没有问题。小 E 现在想要通过剩余的数据恢复原来的输入数据,请你帮助他完成这个任务。

当然,可能会有多种合法的输入数据,你需要找到其中任意一种。数据保证有解。

输入格式

从标准输入读入数据。

本题有多组测试数据。

第一行一个正整数 TT,表示数据组数。

对于每组测试数据,第一行两个非负整数 n,qn,q

第二行 nn 个整数,表示初始序列 a1,a2,,ana_1,a_2,\ldots,a_n

接下来 qq 行,每行一次操作,形如 1 l r x\tt{1~l~r~x}2 l r\tt{2~l~r}

接下来一行 nn 个整数,表示最终序列 a1,a2,,ana_1',a_2',\ldots,a_n'

输出格式

输出到标准输出。

本题开启自定义校验器(Special Judge)。

对于每组测试数据,设共有 q2q_222 操作,输出一行 q2q_2 个整数,第 ii 个整数表示第 ii22 操作中所给出的 xx 的值。

你需要保证 1015x1015-10^{15}\le x\le 10^{15}

1
5 3
1 2 3 4 5
2 3 5
1 3 4 2
2 1 1
20 2 5 6 5

3 20

提示

【样例 1 解释】

所有合法输出需要满足:第 11 个数 3\le3,第 22 个数恰好为 2020

【样例 2】

见选手文件中的 restore/restore2.inrestore/restore2.ans

【样例 3】

见选手文件中的 restore/restore3.inrestore/restore3.ans


【数据范围】

q2q_2 为单组数据内 22 操作的个数,n\sum n 为单个测试点内所有 nn 的和,q\sum q 为单个测试点内所有 qq 的和。

对于 20%20\% 的数据,保证 n,q50n,q\le50n,q1 000\sum n,\sum q\le1~000

对于 40%40\% 的数据,保证 n,q1 000n,q\le1~000n,q105\sum n,\sum q\le10^5

对于另外 20%20\% 的数据,保证 l=1,r=nl=1,r=n

对于另外 20%20\% 的数据,保证 q2100q_2\le100

对于 100%100\% 的数据,保证 1T1001\le T\le 1001n,q1051\le n,q\le 10^51n,q3×1051\le\sum n,\sum q\le 3\times10^5109ai,x109-10^9\le a_i,x\le 10^91015ai1015-10^{15}\le a_i'\le10^{15}q21q_2\ge1


【校验器】

本题样例文件较大,无法在附件中下载,请在选手文件中查看。

为了方便测试,在 restore\texttt{restore} 目录下我们下发了 checker.cpp\texttt{checker.cpp} 文件。你可以编译该文件,并使用它校验自己的输出文件。请注意它与最终评测时所用的校验器并不完全一致,你不需要也不应该关心其代码的具体内容。

编译命令为:

g++ checker.cpp -o checker -std=c++14

使用方式为:

./checker <inputfile> <outputfile> <answerfile>

校验器可能会返回以下状态中的其中一种:

  • Accepted\tt{Accepted}:表示你的输出完全正确。
  • Wrong answer at testcase x\tt{Wrong~answer~at~testcase~ x}:表示你的输出在第 xx 个测试数据出错。

【提示】

本题输入输出量较大,推荐使用较快的输入输出方式。

KDOI 出题组温馨提示:多测不清空,爆零两行泪。