P10300 [THUWC 2020] 工资分配
题目描述
月末,一家公司的老板给公司内的 $k$ 个员工(他们被编号为 $1\sim k$)准备了一份工资的分配方案。这份方案可以用一个长度为 $k$ 的序列 $a$ 表示,其中 $a_i$ 表示第 $i$ 个人的工资。现在,这份分配方案放在办公室的桌上,无人看管。
一些员工决定通过替换的方式替换掉这份工资分配方案,来使得自己获得更多的工资。于是,一些员工自己准备了一个自行伪造、不会被老板察觉的分配方案 $b$(也是一个长度为 $k$ 的序列),并选择在一个时刻潜入办公室。他会偷看**当前**放在办公桌上的分配方案 $a^{'}$,如果该员工编号为 $i$ 且 $b_i > a^{'}_ i$,他就会把**整个分配方案**替换成 $b$。为了保证替换成功,一个员工可能会在多个时刻潜入办公室,并且可能会伪造不同的分配方案。但同一时刻最多有一个员工潜入办公室。
假设一天总共有 $n$ 个时刻有员工潜入,我们将这些时刻按时间顺序从 $1$ 到 $n$ 编号。现在,你知道了在每个时刻 $t$,潜入办公室的员工 $p_t$ 和他在 $t$ 时刻伪造的分配方案 $b_t$。现在给出 $q$ 个询问,每次询问会给出一个老板的初始分配方案,请你计算出最后放在桌面上的分配方案。
输入格式
第一行三个整数 $n$、$q$、$k$,表示时刻的个数、询问的个数和员工的个数;
接下来 $n$ 行,每行 $k+1$ 个整数 $p_t, b_{t,1},\cdots, b_{t_k}$,表示 $t$ 时刻潜入的员工和他准备的分配方案;
接下来 $q$ 行,每行 $k$ 个整数 $a_1, \cdots, a_k$,表示老板的初始分配方案。
输出格式
输出 $q$ 行,每行 $k$ 个整数,表示最后的方案。
说明/提示
**【子任务】**
存在 20% 的数据,$n,q\le 1,000$
存在另外 10% 的数据,$k=1$;
对于所有的数据,$n,q\le 10^5, k\le 20$。
**【提示】**
本题输入、输出规模较大,建议使用 `scanf/printf` 进行输入输出。如果使用 `cin/cout`,建议在 `main` 函数开头加上 `std::ios::sync_with_stdio(0); std::cin.tie(0); std::cout.tie(0);`。