#542. 特殊的积木

特殊的积木

特殊的积木

题目描述

小蓝有 nn 个积木,从左到右编号为 11 到 nn。在第 ii 个积木上写着一个整数 aia_i。

对于一个连续的积木段 [l,r][l, r](1≤l≤r≤n1 \le l \le r \le n),我们定义一个整数 dd(0≤d≤r−l0 \le d \le r-l)是"特殊的",如果从第 ll 个积木开始的连续 d+1d+1 个积木上数字的最小值恰好等于 dd,即 min⁡(al,al+1,…,al+d)=d\min(a_l, a_{l+1}, \ldots, a_{l+d}) = d。

小蓝想要进行 qq 次操作,操作有两种类型:

  1. 修改操作:将第 ii 个积木上的数字改为 xx。
  2. 查询操作:查询积木段 [l,r][l, r] 的"特殊度",即该区间内特殊数的个数。

请帮助小蓝完成这些操作。

输入格式

第一行包含两个整数 nn 和 qq(1≤n,q≤2⋅1051 \le n, q \le 2 \cdot 10^5),分别表示积木的数量和操作的数量。

第二行包含 nn 个整数 a1,a2,…,ana_1, a_2, \ldots, a_n(1≤ai≤2⋅1051 \le a_i \le 2 \cdot 10^5),表示每个积木上初始的数字。

接下来 qq 行,每行描述一个操作:

  • 若第一个整数为 11,则后面跟着两个整数 ii(1≤i≤n1 \le i \le n)和 xx(1≤x≤2⋅1051 \le x \le 2 \cdot 10^5),表示修改操作。
  • 若第一个整数为 22,则后面跟着两个整数 ll 和 rr(1≤l≤r≤n1 \le l \le r \le n),表示查询操作。

保证所有测试用例中 nn 的总和不超过 2⋅1052 \cdot 10^5,qq 的总和不超过 2⋅1052 \cdot 10^5。

输出格式

对于每个测试用例,对于每次查询操作,输出一行一个整数,表示该区间的特殊度。

输入输出样例

5 5
1 2 3 4 5
2 1 5
1 1 5
1 2 5
1 3 1
2 1 5
1
0
3 2
1 1 1
2 1 3
2 1 2
1
1

说明/提示

对于 40%40\% 的测试点,保证 1≤n≤5001\leq n\leq 500。

对于所有测试点,保证 1≤n≤2⋅1051\leq n\leq 2\cdot10^5。


在第一个样例中,初始积木为 [1,2,3,4,5][1, 2, 3, 4, 5]。

第一次查询 [1,5][1, 5] 时:

  • d=0d = 0:min⁡(1)=1≠0\min(1) = 1 \neq 0,不是特殊的
  • d=1d = 1:min⁡(1,2)=1=1\min(1, 2) = 1 = 1,是特殊的
  • d=2d = 2:min⁡(1,2,3)=1≠2\min(1, 2, 3) = 1 \neq 2,不是特殊的
  • d=3d = 3:min⁡(1,2,3,4)=1≠3\min(1, 2, 3, 4) = 1 \neq 3,不是特殊的
  • d=4d = 4:min⁡(1,2,3,4,5)=1≠4\min(1, 2, 3, 4, 5) = 1 \neq 4,不是特殊的

因此特殊度为 11。

经过修改后,积木变为 [5,5,1,4,5][5, 5, 1, 4, 5],此时特殊度为 00。