U531785 Minecraft 红石电路模拟器

题目背景

# MCYYDS is dead

题目描述

在《我的世界》中,红石电路是一种复杂的机械系统,玩家可以通过红石粉、红石火把、红石中继器等元件来构建各种逻辑电路。现在,你需要实现一个简化版的红石电路模拟器。

输入格式

第一行包含两个整数 $\tt N$ 和 $\tt M$,表示电路的宽度和高度(1 ≤ $ \tt N, M$ ≤ 1000)。 接下来 $\tt M$ 行,每行包含 $\tt N$ 个字符,表示电路的初始状态。每个字符可以是以下之一: `.`:表示空气(不导电) `R`:表示红石粉(可以传导信号) `T`:表示红石火把(可以产生信号) `B`:表示红石块(可以产生信号) `S`:表示红石中继器(可以延长信号) `D`:表示红石比较器(可以比较信号) 接下来一行包含一个整数 $Q$,表示操作的数量(1 ≤ $Q$ ≤ 10000)。 接下来 $Q$ 行,每行描述一个操作,格式为 $\tt op, x, y$,其中: $\tt op$ 是操作类型,可以是$\tt update 或 query$。 $\tt update$ $x$ $y$:将位置 ($x$,$ y$) 的元件更新为 R(红石粉)。 $\tt query$ $x$ $y$:查询位置 ($x$,$ y$) 的信号强度。

输出格式

对于每个 $query$ 操作,输出一个整数,表示该位置的信号强度。如果该位置没有信号,输出 `0`。

说明/提示

信号传播规则: 红石火把(`T`)和红石块(`B`)会持续产生强度为 15 的信号。 红石粉(`R`)会将其信号强度向相邻的四个方向(上下左右)传播,每次传播信号强度减 1,直到信号强度为 0。 红石中继器(`S`)会将其输入信号强度延长为 15,并延迟 1 个时间单位。 红石比较器(`D`)会将其输入信号强度与侧边输入信号强度进行比较,输出较大的信号强度。 #### 对于 30% 的数据,$\tt N, M$ ≤ 100,$ \tt Q$ ≤ 1000。 #### 对于 100% 的数据,$ \tt N, M$ ≤ 1000,$\tt Q$ ≤ 10000。 [题解](https://www.luogu.com.cn/paste/v5sbqd8k)