U93805 生存战略(survive)

题目背景

``` 我讨厌「命运」这个词 出生 相遇 离别 成功和失败 人生的幸运和不幸 如果这些都是由命运事先决定好了的话 那我们又是为何而生的呢 在富裕家庭里出生的人 由漂亮妈妈生下来的人 正逢饥荒和战争时期出生的人 如果这一切都是命运 那神明可就太不讲道理 太残酷了 从那时开始 我们就没有未来 因为我们深知 自己必将一事无成 《回转企鹅罐》 ```

题目描述

给你一个 $n\times m$ 的矩阵从上往下行数递增,从左到右列数递增,对它进行 $q$ 次操作: 1. 给 $x_1, y_1, x_2, y_2, v$,将 $x_1\le x\le x_2, y_1\le y\le y_2$ 部分的数都加上 $v$。 2. 给出 $x_1, y_1, l, t$,将 $x_1 \le x \le x_1 + l, y_1\le y\le y_1 + l$ 位置的正方形内部的数逆时针旋转 $t\times 90^\circ$。 **有个数据点里有 $opt=0$ 的情况,请当做 $opt=2$ 处理** 请你输出操作结束后的矩阵。 矩阵内的数均对 $2^{32}$ 取模,这意味着你可以使用 `unsigned int` 进行计算。

输入格式

第一行输入四个数 $n, m, q, \mathrm{lim}$ 接下来 $q$ 行输入每行第一个数 $opt$ 表示操作类型,然后对应该操作类型输入对应的参数。

输出格式

为了降低输出量,输出 $\mathrm{lim}$ 个数。 假设将矩阵的数第 $i$ 行第 $j$ 列为 `a[i][j]`,令 ```cpp output[((i - 1) * m + j - 1) % lim] ^= a[i][j] + ((i - 1) * m + j - 1) / lim ``` 输出数组 `output[0], output[1], ... output[lim - 1]` 即可。

说明/提示

#### 样例 1 解释 第一次操作: ```plain 0 0 0 0 0 1 1 1 0 1 1 1 0 1 1 1 ``` 第二次操作: ```plain 0 0 0 0 0 1 1 1 1 1 1 1 0 0 1 1 ``` #### 数据范围 空间限制:$512\texttt{MB}$ 时间限制:$2\texttt{s}$ 对于 $100\%$ 的数据,保证 $1\le n, m, q\le 2,000, \mathrm{lim} = \min(nm, 10^5)$。 | 测试点 | $n,m$ | 特殊性质 | | :-------: | :------: | :----------------------: | | $1,2$ | $\le100$ | | | $3,4,5,6$ | $\le600$ | | | $7,8$ | | 没有操作 2 | | $9$ | | 所有操作 1 在操作 2 之前 | | $10$ | | | 空的地方表示没有额外限制。 #### 提示 这是一道低级数据结构题。