#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 分:无附加限制。


Problem Info

#SIM305. 可撤销的绘图板

ID 10337
类型 传统题
时间 1000ms
内存 256MiB
尝试 1 已通过 1
难度 10
上传者
标签
模拟状态维护T3+