Problem
Play with sequence
Description
维护一个长度为的序列,现在有三种操作:
- 给出参数,将都赋值为。
- 给出参数,对于区间里的每个数,将赋值为。
- 给出参数,输出里值为的数字个数。
Input
第一行包含两个正整数,分别表示序列长度和操作个数。
第二行包含个整数,其中第个数表示,描述序列的初始状态。
接下来行描述个操作,保证,对于操作,,对于操作,。
Output
Sample Input
1 | 5 3 |
Sample Output
1 | 2 |
Source
2016.1.1
新加数据
鸣谢Claris
标签:SegBeats
线段树
Solution
参见吉老师的冬令营课件。
令二元组表示对于区间中的每个数先再,发现这样的二元组是可以合并的。
对于二元组和,前者在后者的前面出现,则合并起来变成。
维护每个区间的最小值、次小值、最小值个数即可。若某区间后最小值和次小值的大小关系未发生改变,那么不需要递归到子区间重新打擂。维护即可。
Code
1 |
|