可修改序列的单调栈¶
时间限制:0.5 秒。内存限制:256 MiB。参考 评测环境与性能。
背景故事¶
观测站按位置记录信号强度。回放一段记录时,新信号会替换栈顶所有不比它强的信号。记录随时可能被修正,系统需要报告每次回放后留下多少条信号。
(本故事由GPT-6重写)
形式化问题描述¶
给定长度为 \(n\) 的整数序列 \(a\) ,处理 \(m\) 个操作:
1 x v:令 \(a_x=v\) .2 l r:新建一个空栈,按 \(a_l,a_{l+1},\ldots,a_r\) 的顺序逐个加入。加入 \(v\) 前,只要栈非空且栈顶值 \(\le v\) ,就弹出栈顶;然后将 \(v\) 压栈。输出最终栈大小。
查询不修改序列。下标从 \(1\) 开始,每次查询都从空栈开始。相等元素会触发弹栈,栈内元素从底到顶严格递减。
输入格式¶
第一行包含 n m ,第二行包含 \(n\) 个初始值。接下来 \(m\) 行,每行是上述一种操作。
输出格式¶
每个查询输出一行一个整数。
样例 1¶
输入¶
5 6
5 3 3 4 2
2 1 5
1 1 1
2 1 5
2 2 3
1 3 8
2 2 5
输出¶
3
2
1
3
样例 2¶
输入¶
1 3
0
2 1 1
1 1 1000000000
2 1 1
输出¶
1
1
样例解释¶
样例1的第一次查询留下 \([5,4,2]\) .修改首项后留下 \([4,2]\) ;查询两个相等的 \(3\) 只留下一个。
从左到右压栈,右侧不小于当前元素的值会将其移除。
数据范围与保证¶
\(1\le n,m\le50000\) ,\(0\le a_i,v\le10^9\) ,\(1\le x\le n\) ,\(1\le l\le r\le n\) .
规格重新设计:Codex(GPT-6);明确遍历方向、相等时弹栈及每次查询的独立性。
| 分值 | 额外限制 |
|---|---|
| 20% | \(n\le50,\ m\le100\) |
| 30% | \(n,m\le2000\) |
| 50% | 无额外限制 |