B4550 贴纸整理

题目描述

有一张 $n$ 行 $m$ 列的贴纸板。开始时,所有格子都是空的。 每张成功贴上的贴纸都会得到一个编号。第一张成功贴上的贴纸编号为 $1$,第二张成功贴上的贴纸编号为 $2$,依次类推。失败的贴纸操作不会得到新的贴纸编号。 接下来有 $q$ 个操作,共有三种类型: - 操作 $1$:贴上一张长方形贴纸。需要指定贴纸左上角的位置 $(x,y)$ 以及它占用的行数 $h$、列数 $w$。贴纸会盖住从第 $x$ 行到第 $x+h-1$ 行、从第 $y$ 列到第 $y+w-1$ 列的所有格子。只有当贴纸完全在贴纸板内、且所有目标格子当前都为空时,才能成功贴上。成功时贴纸获得一个新编号并输出该编号;失败时输出 `Error`,贴纸板不发生变化。 - 操作 $2$:取下一张已经贴上的贴纸。需要指定贴纸编号 $id$。只有当编号为 $id$ 的贴纸曾经成功贴上、且当前未被取下时,才能成功取下。成功时输出 `Remove`;失败时输出 `Error`,贴纸板不发生变化。 - 操作 $3$:查询一个格子。需要指定位置 $(x,y)$。如果该格子为空,输出 $0$;否则输出盖住该格子的贴纸编号。 所有操作结束后,程序还需要输出当前仍在贴纸板上的贴纸数量,以及当前被贴纸盖住的格子数量。

输入格式

第一行三个整数 $n,m,q$。 接下来 $q$ 行,每行表示一个操作,格式如下: - 若为操作 $1$,该行包含五个整数:$1\ x\ y\ h\ w$。 - 若为操作 $2$,该行包含两个整数:$2\ id$。 - 若为操作 $3$,该行包含三个整数:$3\ x\ y$。

输出格式

对于操作 $1$,如果操作成功,程序输出这张贴纸的编号;如果操作失败,程序输出 `Error`。 对于操作 $2$,如果操作成功,程序输出 `Remove`;如果操作失败,程序输出 `Error`。 对于操作 $3$,程序输出被查询格子当前的贴纸编号。如果这个格子为空,程序输出 $0$。 最后一行输出两个整数,分别表示当前仍在贴纸板上的贴纸数量和当前被贴纸盖住的格子数量。

说明/提示

样例 $1$ 中,第 $1$ 次操作成功贴上编号为 $1$ 的贴纸;第 $3$ 次操作想贴的位置和编号为 $1$ 的贴纸重合,所以这次操作失败。取下编号为 $1$ 的贴纸后,第 $6$ 次操作成功贴上编号为 $3$ 的贴纸。最后编号为 $2$ 和 $3$ 的贴纸还在贴纸板上,共盖住 $8$ 个格子。 样例 $2$ 中,第 $1$ 次操作会让贴纸超过贴纸板边界,所以失败;编号为 $2$ 的贴纸从未成功贴上,因此第 $4$ 次操作失败。 - 对于 $30\%$ 的数据,保证:$1\le n,m\le 10$,$1\le q\le 20$,没有操作 $2$。 - 对于另外 $30\%$ 的数据,保证:$1\le n,m\le 30$,$1\le q\le 200$。 - 对于 $100\%$ 的数据,保证:$1\le n,m\le 50$,$1\le q\le 1000$,$1\le x,y\le 1000$,$1\le h,w\le 50$,$1\le id\le 1000$,操作编号只会是 $1$、$2$ 或 $3$。对于操作 $3$,保证 $1\le x\le n$ 且 $1\le y\le m$。