#loj5205. 「UOI 2025 Stage 4 Day1」简单子序列

「UOI 2025 Stage 4 Day1」简单子序列

[AdditionalFile5205.zip](file://AdditionalFile5205.zip?type=additional_file)

#5205. 「UOI 2025 Stage 4 Day1」简单子序列

标签: 传统 | 时间限制: 1500 ms | 内存限制: 256 MiB |

题目描述

题目译自 Ukrainian Olympiads in Informatics 2025 Stage 4 Day1 T4. Проста підпослідовність

我们称一个整数数组 d1,d2,,dmd_1, d_2, \ldots, d_m好的,如果其长度为 00,或者对于任意 1im1 \le i \le m,前缀和 j=1idj\sum\limits_{j=1}^{i} d_j 以及后缀和 j=imdj\sum\limits_{j=i}^{m} d_j 都是非负的。其中,j=lrdj\sum\limits_{j=l}^{r} d_j 表示 dl+dl+1++drd_l + d_{l+1} + \ldots + d_{r}

我们定义一个数组的美丽度为它的最长好的子序列的长度。

给定一个长度为 nn 的数组 aa,数组元素仅由 1-111 组成。

你需要处理 qq 个查询,查询分为两种类型:

  1. 将元素 apa_p 替换为 ap-a_p,其中 pp 是查询参数;
  2. 计算由元素 [al,al+1,,ar][a_{l}, a_{l+1}, \ldots, a_r] 组成的数组的美丽度,其中 (l,r)(l, r) 是查询参数。

注意:数组 cc 称为数组 bb 的子序列,如果可以通过从数组 bb 中删除若干元素(可能是零个),使得剩余元素组成数组 cc。空数组是任意数组的子序列。

输入格式

输入的第一行包含两个整数 nnqq (1n,q5105)(1 \le n, q \le 5 \cdot 10^5),分别表示数组 aa 的长度和查询的数量。

第二行包含 nn 个整数 a1,a2,,ana_1, a_2, \ldots, a_n (ai{1,1})(a_i \in \{-1, 1\}),表示数组 aa 的元素。

接下来的 qq 行描述查询。每行的第一个数字 typeitype_i (1typei2)(1 \le type_i \le 2) 表示查询类型。第一类查询格式为 1 p (1pn)(1 \le p \le n),第二类查询格式为 2 l r (1lrn)(1 \le l \le r \le n)

输出格式

对于每个第二类查询,单独输出一行一个整数,表示对应数组的美丽度

样例 1

输入

5 4
1 1 1 -1 1
2 1 5
1 3
2 1 4
2 2 5

输出

5
2
3

样例 2

输入

4 4
1 1 1 -1
2 1 2
2 2 4
2 3 3
2 3 4

输出

2
2
1
1

数据范围与提示

详细子任务附加限制及分值如下表所示:

子任务 分值 附加限制
11 22 ai=(1)i+1a_i = (-1)^{i+1}(对于 1in1 \le i \le n),且无第一类查询
22 77 n16n \le 16,且无第一类查询
33 2121 n,q100n, q \le 100
44 2020 n,q3000n, q \le 3000
55 2727 n,q2105n, q \le 2 \cdot 10^5,且无第一类查询
66 1414 n,q2105n, q \le 2 \cdot 10^5
77 99 无附加限制