#SIM305. 可撤销的绘图板
SIM305 可撤销的绘图板
难度梯度:T3+|训练重点:撤销栈与有效操作
题目描述
一块 N×N 的空白画板,单元格状态 0 或 1。依次执行 Q 个命令:PAINT r c 将格子设为 1,ERASE r c 将格子设为 0,UNDO 撤销最近一次尚未撤销的 PAINT 或 ERASE。即使一次设置没有改变格子,它也是可撤销的操作。若没有可撤销操作,UNDO 失败;其余操作总成功。每条命令输出 OK/FAIL 和当前画板中 1 的数量。
撤销顺序是后进先出。PAINT/ERASE 即使设置前后值相同,也算一次成功操作并可被撤销;UNDO 不会作为新的可撤销操作入栈。
输入格式
第一行 N Q。随后 Q 行操作;r、c 均在 1..N。
输出格式
Q 行,每行 OK count 或 FAIL count。
样例输入
2 7
PAINT 1 1
PAINT 1 1
PAINT 2 1
UNDO
UNDO
UNDO
UNDO
样例输出
OK 1
OK 1
OK 2
OK 1
OK 1
OK 0
FAIL 0
样例说明
第二个 PAINT 是空变化,也要留在撤销栈中。
数据范围
1≤N≤1000;1≤Q≤2×10^5。
子任务
20 分:Q≤100;30 分:不含 UNDO;50 分:无附加限制。