CF792F Mages and Monsters

题目描述

Vova 玩一款叫做 Mages and Monsters 的电脑游戏。Vova 的角色是位法师。由于刚进入游戏,他的角色尚未掌握任何法术。 Vova 的角色可以在游戏中学习新法术。每个法术由两个数值 $x_{i}$ 和 $y_{i}$ 表示,分别代表每秒造成的伤害和每秒消耗的魔力。Vova 不需要把法术用整数秒,可以使用任意时间。更正式地说,如果他以 $x$ 伤害和 $y$ 魔力消耗的法术施放 $z$ 秒,那他会造成 $x \cdot z$ 伤害,并消耗 $y \cdot z$ 魔力(不进行四舍五入)。如果魔力不足(每场战斗开始时初始魔力为 $m$,且每场战斗恢复为满魔),则无法施放任何法术。在任何时刻禁止同时使用多个法术。 Vova 还可以与怪物战斗。每个怪物由 $t_{j}$ 和 $h_{j}$ 两个值描述——怪物会在 $t_{j}$ 秒内杀死 Vova 的角色,并且自身有 $h_{j}$ 点生命值。每场战斗结束后魔力会恢复(或角色复活时魔力回满),所以前面的战斗不会对之后战斗造成影响。 如果 Vova 能在不超过 $t_{j}$ 秒内用法术对怪物造成至少 $h_{j}$ 点伤害,且消耗的魔力不超过 $m$,他就能击败怪物。若恰好在 $t_{j}$ 秒将怪物生命降至 0,Vova 也获胜。 你需要写一个程序,处理两种类型的操作: - $1\ x\ y$ —— Vova 学习一个每秒造成 $x$ 点伤害、每秒消耗 $y$ 点魔力的法术。 - $2\ t\ h$ —— Vova 与一个可以在 $t$ 秒内杀死他且有 $h$ 点生命值的怪物战斗。 注意,实际输入的查询形式有变化,请仔细阅读输入格式。还要注意,一开始角色不掌握任何法术。 对于每个第二种类型的查询,你需要判断 Vova 是否能够击败相应的怪物。

输入格式

第一行包含两个整数 $q$ 和 $m$ $(2 \leq q \leq 10^5, 1 \leq m \leq 10^{12})$——操作数和每场战斗初始魔力值。 接下来的 $q$ 行,每行包含三个整数 $k_i, a_i, b_i$ $(1 \leq k_i \leq 2, 1 \leq a_i, b_i \leq 10^6)$。 你需要通过下述方式还原每个操作:设 $j$ 为前一条成功“赢下战斗”的第二类操作的编号(如果没有则 $j=0$)。 - 如果 $k_i=1$,则学习的法术 $x=((a_i+j)\bmod 10^6)+1$,$y=((b_i+j)\bmod 10^6)+1$。 - 如果 $k_i=2$,则战斗的怪物参数 $t=((a_i+j)\bmod 10^6)+1$,$h=((b_i+j)\bmod 10^6)+1$。

输出格式

对于每个第二类操作,若 Vova 能战胜怪物输出 `YES`,否则输出 `NO`。

说明/提示

在第一个样例中,Vova 首先学习了伤害为 $5$、消耗为 $10$ 的法术。接下来的询问是一场怪物战斗,怪物能在 $20$ 秒内杀死角色,生命值为 $50$。Vova 用 $10$ 秒就能击杀怪物(消耗 $100$ 魔力)。下一只怪物生命值为 $52$,但 Vova 无法在 $100$ 魔力的限制下造成足够伤害。 由 ChatGPT 5 翻译