AT_past18_o 蟻の移動

题目描述

有 $N$ 只蚂蚁,编号为 $1$ 到 $N$,它们位于一条数轴上,正方向向右。在**初始状态**下,第 $i$ 只蚂蚁位于初始坐标 $X_i$,朝向由字符 $D_i$ 描述。具体来说,$D_i=$ `R` 表示向右,$D_i=$ `L` 表示向左。保证 $X_1,X_2,\dots,X_N$ 是两两不同的偶数。 当 Snuke 打响指后,蚂蚁根据以下规则开始移动: - 每只蚂蚁以每秒 $1$ 的速度朝自己面朝的方向前进。 - 每当两只蚂蚁到达同一坐标时,它们会同时调头并继续移动。此事件称为蚂蚁的**碰撞**。可以证明,三只或以上的蚂蚁绝不会在同一时刻到达同一坐标。 给定总共 $Q$ 个询问,每个询问有以下两种类型之一。按顺序处理它们。 - `1 x d`:在初始状态中添加一只初始坐标为 $x$,朝向为 $d$ 的蚂蚁。这里保证 $x$ 为偶数,且与任意已存在蚂蚁的初始坐标都不同。 - `2 l r`:若 Snuke 在时刻 $0$ 打响指,设 $t_1,t_2,\dots$ 为第 $1$ 只蚂蚁与其它蚂蚁碰撞的时刻,按时间顺序排列。计算 $t_l+t_{l+1}+\dots+t_r$ 并输出。保证 $l \leq r$,且第 $1$ 只蚂蚁与其它蚂蚁至少会碰撞 $r$ 次。 注意,第二类询问之间是相互独立的。也就是说,处理第二类询问不会实际改变蚂蚁的初始状态。

输入格式

输入按如下格式从标准输入给出: > $N$ $Q$ > > $X_1$ $D_1$ > > $X_2$ $D_2$ > > $\vdots$ > > $X_N$ $D_N$ > > $\mathrm{query}_1$ > > $\mathrm{query}_2$ > > $\vdots$ > > $\mathrm{query}_Q$ 其中,第 $i$ 个 $\mathrm{query}_i$ 为如下两种格式之一: > $1\ x\ d$ > > $2\ l\ r$

输出格式

若有 $T$ 个第二类询问,共需输出 $T$ 行。对于第 $i$ 行 ($1\leq i \leq T$),输出第 $i$ 个此类询问的答案。

说明/提示

### 样例说明 1 若 Snuke 在未处理任何询问时的初始状态下打响指,蚂蚁移动如下: - 时刻 $0$,所有蚂蚁开始移动,二者分别朝右和朝左。 - 时刻 $4$($t_1$),第 $1$ 只蚂蚁和第 $2$ 只蚂蚁在坐标 $6$ 处碰撞。此后两只蚂蚁分别朝左和朝右。 因此,第 $1$ 个询问的答案为 $t_1=4$。 若 Snuke 在处理完前三个询问后的初始状态下打响指,蚂蚁移动如下。新加入的蚂蚁,分别称为第 $3$ 只和第 $4$ 只蚂蚁。 - 时刻 $0$,所有蚂蚁开始移动,朝向分别为右、左、左、右。 - 时刻 $1$,第 $3$ 只和第 $4$ 只蚂蚁在坐标 $-1$ 处相遇。此后四只蚂蚁朝向分别为右、左、右、左。 - 时刻 $4$($t_1$),第 $1$ 只和第 $2$ 只蚂蚁在坐标 $6$ 处相遇。此后四只蚂蚁朝向分别为左、右、右、左。 - 时刻 $6$($t_2$),第 $1$ 只和第 $3$ 只蚂蚁在坐标 $4$ 处相遇。此后四只蚂蚁朝向分别为右、右、左、左。 因此,第 $4$ 个询问答案为 $t_1+t_2=10$,第 $5$ 个询问答案为 $t_2=6$。 ### 数据范围 - $N$、$Q$ 为整数。 - $1\leq N,Q \leq 10^5$ - $X_i$ 为偶数。 - $|X_i| \leq 10^9$ - $X_i \neq X_j\ (i \neq j)$ - $D_i$ 取值为 `R` 或 `L`。 - 对于每个第 $1$ 类询问, - $x$ 为偶数。 - $|x| \leq 10^9$ - 在处理该询问时,没有蚂蚁的初始坐标为 $x$。 - $d$ 取值为 `R` 或 `L`。 - 对于每个第 $2$ 类询问, - $l$、$r$ 为整数。 - $1 \leq l \leq r \leq M$,其中 $M$ 是当前状态下第 $1$ 只蚂蚁与其它蚂蚁将发生碰撞的总次数。 由 ChatGPT 5 翻译