P1065

[NOI2008]糖果雨

[NOI2008]糖果雨

在一个美丽的童话中,天空的尽头有一个“糖果国”。这里大到摩天大厦,小到花草,都是用糖果建造而成的。天空中飘着五颜六色的糖果云,不同颜色的云会落下对应颜色的糖果:红色的是草莓糖,黄色的是柠檬糖,绿色的是薄荷糖,黑色的是巧克力糖……

小 Z 梦见自己来到了糖果国。他发现,在任意时刻,天空中所有云朵的颜色都互不相同。不同颜色的云朵不断落下相应颜色的糖果,并在天空的两个边界之间做匀速往返运动。

将天空视为平面直角坐标系,忽略云朵的纵坐标,并将每片云朵抽象为一条线段,线段也可能退化为一个点。设天空的左边界为 00,右边界为 lenlen。每经过一个单位时间,云朵向左或向右移动一个单位。当云朵的左边界碰到天空的左边界时,它会改变方向并向右运动;当云朵完全移出天空的右边界时,它会改变方向并向左运动。各片云朵在运动过程中互不影响。

天空中会不断出现新的云朵。每片云朵会在某个时刻从给定的初始位置开始朝指定方向运动,也可能在某个时刻消失。在云朵存在并运动的过程中,糖果会不断从云朵覆盖的位置落下。

小 Z 会使用容量无限但袋口大小有限的口袋接糖果。在时刻 TT,若袋口覆盖的横坐标区间为 [L,R][L,R],并且区间内存在某个位置 xx,有某种颜色的糖果从该位置落下,则认为口袋能够接到这种颜色的糖果。袋口区间可以退化为一个点,例如 [0,0][0,0] 或 [1,1][1,1]。

对于每次拿出口袋的瞬间,小 Z 想知道口袋能够接到多少种不同颜色的糖果。糖果下落所需的时间忽略不计。

输入格式

第一行包含两个正整数 nn 和 lenlen,分别表示事件总数和天空的右边界。

接下来 nn 行,每行描述一个事件。所有事件按照输入顺序依次发生。每行的第一个整数为 kk,其中 k∈{1,2,3}k\in\{1,2,3\},分别表示插入事件、询问事件和删除事件。

  • 插入事件的格式为 1 Ti Ci Li Ri Di1\ T_i\ C_i\ L_i\ R_i\ D_i。表示在时刻 TiT_i 出现一片颜色编号为 CiC_i 的云朵。该时刻云朵覆盖横坐标区间 [Li,Ri][L_i,R_i]。若 Di=1D_i=1,云朵初始向右运动;若 Di=−1D_i=-1,云朵初始向左运动。
  • 询问事件的格式为 2 Ti Li Ri2\ T_i\ L_i\ R_i。表示在时刻 TiT_i 使用袋口区间 [Li,Ri][L_i,R_i] 接糖果,询问能够接到多少种不同颜色的糖果。
  • 删除事件的格式为 3 Ti Ci3\ T_i\ C_i。表示在时刻 TiT_i,颜色编号为 CiC_i 的云朵消失。

所有事件按照输入顺序处理,发生时间相同时仍按照输入顺序处理。

对于插入事件和询问事件,均有 0≤Li≤Ri≤len0\le L_i\le R_i\le len。对于插入事件,有 Di∈{−1,1}D_i\in\{-1,1\}。

任意时刻,天空中所有仍然存在的云朵颜色编号互不相同。插入事件中的颜色编号在该事件发生前不属于任何仍然存在的云朵;删除事件中的颜色编号一定属于一片仍然存在的云朵。

输出格式

对于每个询问事件输出一行,表示该次询问中口袋能够接到的不同颜色糖果的种数。

样例输入

10 10
1 0 10 1 3 -1
2 1 0 0
2 11 0 10
2 11 0 9
1 11 13 4 7 1
2 13 9 9
2 13 10 10
3 100 13
3 1999999999 10
1 2000000000 10 0 1 1

样例输出

1
1
0
2
1

数据范围

  • n≤2×105n\le 2\times 10^5;
  • 对于每个事件,0≤Ti≤2×1090\le T_i\le 2\times 10^9;
  • 对于每片插入的云朵,令 Pi=Ri−LiP_i=R_i-L_i 表示云朵的长度,满足 Pi≤lenP_i\le len;
  • 颜色编号满足 1≤Ci≤1061\le C_i\le 10^6;
  • 所有事件的发生时间构成非递减序列,即 T1≤T2≤⋯≤Tn−1≤TnT_1\le T_2\le\cdots\le T_{n-1}\le T_n。

来源与许可

本题为 NOI 2008 试题「糖果雨」,题面与测试数据整理自 BZOJ。

样例 1

输入

10 10
1 0 10 1 3 -1
2 1 0 0
2 11 0 10
2 11 0 9
1 11 13 4 7 1
2 13 9 9
2 13 10 10
3 100 13
3 1999999999 10
1 2000000000 10 0 1 1

输出

1
1
0
2
1