U736577 G - 鲤鱼鉴人心
题目背景
你的队友知道你是他的队友吗。
liyuu : hwy是谁啊,哦是我队友啊!
题目描述
鲤鱼正在和他的朋友们游玩一款卡牌游戏。
共有 $n$ 名玩家围成一个圆环,并从 $1$ 号玩家鲤鱼开始,沿顺时针方向依次编号为 $1,2,\ldots,n$。
游戏开始前,所有玩家被分为红、蓝两个阵营。第 $i$ 名玩家的生命值上限为 $a_i$,初始生命值 $b_i=a_i$。
对于除鲤鱼外的玩家,一旦其生命值变为非正,即 $b_i\le 0$,该玩家会**立即出局**。出局后,该玩家不能再行动,也不会再成为其他玩家行动的目标。
游戏共进行 $m$ 次行动。最开始轮到 $1$ 号玩家行动。每次行动结束后,轮到其顺时针方向上最近的一名仍可行动的玩家;已经出局的玩家会被直接跳过。特别地,鲤鱼无论生命值是否为正,都不会出局,因此始终可以行动。
第 $k$ 次行动的类型由输入中的第 $k$ 个操作 $op_k$ 决定。行动共有以下三种:
- **攻击**:对顺时针方向上最近的一名自己视为**不同阵营**的存活玩家发动攻击,造成“自身已损失生命值 $+1$”点伤害。也就是说,若行动者为 $i$,则伤害为
$$
a_i-b_i+1.
$$
- **回复**:使自身回复“当前场上存活玩家数量”点生命值,但回复后生命值不能超过自身生命值上限。
- **削弱**:使顺时针方向上最近的一名自己视为**不同阵营**的存活玩家的生命值上限减少 $1$。若该玩家当前生命值超过新的生命值上限,则其当前生命值同时降至新的生命值上限。
若一次攻击或削弱不存在合法目标,则本次行动不产生任何影响。
特别地,因为友好的队伍传统:
1. **所有其他玩家始终将鲤鱼视为与自己阵营不同。**
2. 鲤鱼初始时按照真实阵营判断其他玩家是否与自己同阵营。
3. 若某名与鲤鱼真实阵营相同的玩家曾经对鲤鱼进行过一次**攻击**或**削弱**,那么从这一时刻开始,鲤鱼在本局游戏的剩余过程中也会永久将该玩家视为与自己阵营不同。
4. 鲤鱼即使生命值 $b_1\le0$ 也不会出局。
现在给出所有玩家的初始信息以及 $m$ 次行动的类型,请你判断游戏结束后每名玩家是否仍然存活。
输入格式
第一行输入两个正整数 $n,m$,分别表示玩家数量和行动次数。
接下来 $n$ 行,第 $i$ 行输入两个整数 $a_i,c_i$,分别表示第 $i$ 名玩家的生命值上限和所属阵营。其中 $c_i=0$ 表示蓝色阵营,$c_i=1$ 表示红色阵营。
接下来 $m$ 行,第 $k$ 行输入一个整数 $op_k$,表示第 $k$ 次行动的类型:
- $op_k=1$:攻击;
- $op_k=2$:回复;
- $op_k=3$:削弱。
输出格式
输出一行 $n$ 个整数,第 $i$ 个整数表示第 $i$ 名玩家最终是否存活:$1$ 表示存活,$0$ 表示已经出局。
特别地,鲤鱼始终不会出局,因此第一个整数恒为 $1$。
说明/提示
**样例解释**
第 $1,2$ 次行动分别由 $1,2$ 号玩家进行,二者均执行回复。由于此时生命值已经等于生命值上限,所以没有产生实际效果。
第 $3$ 次行动由 $3$ 号玩家进行攻击。场上所有玩家的真实阵营都相同,但所有其他玩家都会将鲤鱼视为不同阵营,因此 $3$ 号玩家攻击 $1$ 号玩家,造成 $1$ 点伤害。此时鲤鱼生命值变为 $0$,但鲤鱼不会出局。同时,鲤鱼从此也会将 $3$ 号玩家视为不同阵营。
第 $4,5$ 次行动分别由 $4,5$ 号玩家进行回复,没有产生实际效果。
第 $6$ 次行动重新轮到鲤鱼。此时鲤鱼顺时针方向上最近的一名被其视为不同阵营的玩家是 $3$ 号玩家。鲤鱼已经损失了 $1$ 点生命,因此本次攻击造成 $1+1=2$ 点伤害,使 $3$ 号玩家生命值变为 $-1$ 并立即出局。
#### **数据范围与提示**
对于所有测试数据,保证:
$$
1\le n,m\le 10000,
$$
$$
1\le a_i\le 1000000,
$$
$$
0\le c_i\le 1,
$$
$$
1\le op_k\le 3.
$$
特殊性质 A:对所有 $1\le k\le m$,均有 $op_k=2$。
特殊性质 B:对所有 $2\le i\le n$,均有 $c_i\ne c_1$。
| 数据点 | 分值 | 特殊性质 |
| :---: | :---: | :---: |
| $1$ | $10\text{pt}$ | $n=1$ |
| $2\sim3$ | $20\text{pt}$ | A |
| $4\sim6$ | $30\text{pt}$ | B |
| $7\sim10$ | $40\text{pt}$ | 无 |