CF264E Roadside Trees
题目描述
松鼠 Liss 喜欢坚果。Liss 让你在路边种一些坚果树。
在一条街道上有 $n$ 个位置(从西到东编号为 $1$ 到 $n$),可以在每个位置上种一棵树。树每个月会长高一米。在每个月的开始,你需要处理一个查询。查询有以下两种类型:
1. 在第 $p$ 个位置种一棵初始高度为 $h$ 的树。
2. 砍掉从西数第 $x$ 棵现存(未被砍掉)的树($x$ 从 $1$ 开始编号)。砍掉树后,这棵树会倒下并占据它原本的位置,这个位置以后不能再种树。
每处理完一个查询,你都需要输出最长严格递增子序列的长度。一个树的子集被称为递增子序列,如果该子集中树的高度从西到东严格递增(即,最西边的树高度最小,且每一棵往东的树比前一棵高)。递增子序列的长度即为其中树的数量。
注意,Liss 不喜欢高度相同的树,因此保证任意时刻不会有高度完全相同的两棵树。
输入格式
第一行包含两个整数 $n$ 和 $m$($1 \leq n \leq 10^5, 1 \leq m \leq 2 \cdot 10^5$),表示可植树的位置数量和查询数量。
接下来的 $m$ 行,每行描述一个查询,具体格式如下:
- 如果第 $i$ 个查询类型为 1,则这一行包含三个整数:1,$p_i$ 和 $h_i$($1 \leq p_i \leq n, 1 \leq h_i \leq 10$),表示在位置 $p_i$ 种一棵初始高度 $h_i$ 的树。
- 如果第 $i$ 个查询类型为 2,则这一行包含两个整数:2 和 $x_i$($1 \leq x_i \leq 10$),表示要砍掉从西数第 $x_i$ 棵现存的树。
保证输入数据合法,即:
- 对于类型 1 的查询,所有 $p_i$ 互不相同。
- 对于类型 2 的查询,$x_i$ 不会超过当前现存树的数量。
- 任意时刻不会有高度完全相同的两棵树。
每行中的整数由单个空格分隔。
输出格式
输出 $m$ 个整数,分别表示每次查询后最长严格递增子序列的长度。用空格分隔。
说明/提示
每次查询后街道上的状态如动画所示:

如果你的浏览器不支持此动画 png,可以点击此链接查看 gif 版本:http://212.193.37.254/codeforces/images/162/roadtree.gif
由 ChatGPT 5 翻译