#P4203. [NOI2008] 糖果雨

[NOI2008] 糖果雨

题目描述

有一个美丽的童话:在天空的尽头有一个"糖果国",这里大到摩天大厦,小到小花小草都是用糖果建造而成的。更加神奇的是,天空中飘满了五颜六色的糖果云,很快糖果雨密密麻麻从天而落,红色的是草莓糖,黄色的是柠檬糖,绿色的是薄荷糖,黑色的是巧克力糖……这时糖果国的小朋友们便会拿出大大小小的口袋来接天空中落下的糖果,拿回去与朋友们一起分享。

对糖果情有独钟的小 Z 憧憬着能够来到这样一个童话的国度。所谓日有所思,夜有所梦,这天晚上小 Z 梦见自己来到了“糖果国”。他惊喜地发现,任何时候天空中所有的云朵颜色都不相同,不同颜色的云朵在不断地落下相应颜色的糖果。更加有趣的是所有的云朵都在做着匀速往返运动,不妨想象天空是有边界的, 而所有的云朵恰好在两个边界之间做着往返运动。每一个单位时间云朵向左或向右运动一个单位,当云朵的左界碰到天空的左界,它会改变方向向右运动;当云朵完全移出了天空的右界,它会改变方向向左运动。

我们不妨把天空想象为一个平面直角坐标系,而云朵则抽象为线段(线段可能退化为点):

如上图,不妨设天空的左界为 00,右界为 len\textit{len}。图中共有 55 片云朵,其中标号为 11 的云朵恰好改变方向向右运动,标号为 22 的云朵恰好改变方向向左运动。

忽略云朵的纵坐标,它们在运动过程中不会相互影响。

小 Z 发现天空中会不断出现一些云朵(某个时刻从某个初始位置开始朝某个方向运动),而有的云朵运动到一定时刻就会从天空中消失,而在运动的过程中糖果在不断地下落。小 Z 决定拿很多口袋来接糖果,口袋容量是无限的,但袋 口大小却是有限的。例如在时刻 TT 小 Z 拿一个横坐标范围为 [L,R][L,R] 的口袋来接糖果,如果 [L,R][L, R] 存在一个位置 xx,该位置有某种颜色的糖果落下,则认为该口袋可接到此种颜色的糖果。极端情况下,袋口区间可能是一个点,譬如 [0,0][0,0][1,1][1,1],但仍然可以接到相应位置的糖果。通常可以接到的糖果总数会很大,因而小 Z 想知道每一次(即拿出口袋的一瞬间)他的口袋可以接到多少种不同颜色的糖果。

糖果下落的时间忽略不计。

输入格式

输入文件第一行有两个正整数 n,lenn,\textit{len},分别表示事件总数以及天空的“边界”。

接下来 nn 行每行描述一个事件,所有的事件按照输入顺序依次发生。每行的第一个数 kkk{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,天空中出现了一片坐标范围为 [Li,Ri][L_i, R_i],颜色为 CiC_i 的云朵,初始的时候云朵运动方向为向左(Di=1D_i = -1)或向右(Di=1D_i = 1)。满足 0LiRilen0 ≤ L_i ≤ R_i ≤ \textit{len}Di{1,1}D_i \in \{-1,1\}。数据保证任何时刻空中不会出现两片颜色相同的云朵。
询问事件(询问一个口袋可以接到多少种不同颜色的糖果) 2  Ti  Li  Ri2\; T_i\; L_i\; R_i 时刻 TiT_i,小 Z 用一个坐标范围为 [Li,Ri][L_i, R_i] 的大口袋去接糖果,询问可以接到多少种不同的糖果。满足 0LiRilen0 ≤ L_i ≤ R_i ≤ \textit{len}
删除事件(天空中一片云朵消失了) 3  Ti  Ci3\;T_i\;C_i 时刻 TiT_i,颜色为 CiC_i 的云朵从天空中消失。数据保证当前天空中一定存在一片颜色为 CiC_i 的云朵。

输出格式

对于每一个询问事件,输出中应包含相应的一行,为该次询问的答案,即口袋可以接到多少种不同的糖果。

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 

提示

【样例说明】

1010 个事件,包括 33 个插入事件,55 个询问事件以及 22 个删除事件。

时刻 00,天空中出现一片颜色为 1010 的云朵,初始位置为 [1,3][1, 3],方向向左。

时刻 11,范围为 [0,0][0, 0] 的口袋可以接到颜色为 1010 的糖果(云朵位置为 [0,2][0, 2])。

时刻 1111,范围为 [0,10][0,10] 的口袋可以接到颜色为 1010 的糖果(云朵位置为 [10,12][10, 12])。

时刻 1111,范围为 [0,9][0, 9] 的口袋不能接到颜色为 1010 的糖果(云朵位置为 [10,12][10, 12])。

时刻 1111, 天空中出现一片颜色为 1313 的云朵,初始位置为 [4,7][4, 7], 方向向右。

时刻 1313,范围为 [9,9][9, 9] 的口袋可以接到颜色为 1010(云朵的位置为 [8,10][8, 10])和颜色为 1313(云朵的位置为 [6,9][6, 9])两种不同的糖果。

时刻 1313,范围为 [10,10][10, 10] 的口袋仅仅可以接到颜色为 1010 的一种糖果(云朵的位置为 [8,10][8, 10]),而不可以接到颜色为 1313 的糖果(云朵的位置为 [6,9][6, 9])。

时刻 100100,颜色为 1313 的云朵从天空中消失。

时刻 19999999991999999999,颜色为 1010 的云朵从天空中消失。

时刻 20000000002000000000,天空中又出现一片颜色为 1010 的云朵,初始位置为 [0,1][0, 1],方向向右。

【数据范围】

对于所有的数据,0Ti2×1091Ci1060 ≤ T_i ≤ 2\times 10^9,1 ≤ C_i ≤ 10^6

数据保证 {Ti}\{T_i\} 为非递减序列即 T1T2Tn1TnT_1 ≤ T_2 ≤ \cdots ≤ T_{n-1} ≤ T_n

对于所有的插入事件,令 Pi=RiLiP_i = R_i - L_i,即 PiP_i 表示每片云朵的长度。

数据编号 nn len\textit{len} PiP_i 数据编号 nn len\textit{len} PiP_i
11 2020 1010 len≤\textit{len} 66 1.5×1051.5\times 10^5 10001000 3≤3
22 200200 100100 77 2×1052\times 10^5
33 20002000 10001000 88 10510^5 len≤\textit{len}
44 10510^5 1010 99 1.5×1051.5\times 10^5
55 100100 2≤2 1010 2×1052\times 10^5