#P12452. [UOI 2023] An Array and Partial Sums
[UOI 2023] An Array and Partial Sums
题目描述
对于一个长度为 的整数数组 ,其前缀和数组 定义为长度为 的数组,其中 。
对于一个长度为 的整数数组 ,其后缀和数组 定义为长度为 的数组,其中 。
我们定义整数数组 的标准化操作为:对于 ,执行赋值 。
给定一个长度为 的整数数组 。
允许执行以下三种类型的操作:
- 将数组 的每个元素取相反数(即对 执行赋值 );
- 选择数组 的任意子段,并用其前缀和数组替换该子段,然后对数组 进行标准化;
- 选择数组 的任意子段,并用其后缀和数组替换该子段,然后对数组 进行标准化。
找到使数组 的所有元素变为非负数的最短操作序列。
注意:对于某些测试用例组,允许输出的操作序列不一定是最短的。
输入格式
第一行包含两个整数 和 (,)——分别表示数组的长度和测试用例组编号。
第二行包含 个整数 ()——数组的元素。
输出格式
第一行输出一个整数 —— 使数组 的所有元素变为非负数所需的最小操作次数。
接下来的 行,每行输出一个操作的描述:
- 对于类型 1 的操作,输出格式为
1
; - 对于类型 2 的操作,输出格式为
2 l r
,其中 和 ()表示操作子段的左右边界; - 对于类型 3 的操作,输出格式为
3 l r
,其中 和 的定义同上。
如果存在多个正确答案,输出任意一个均可。
输入输出样例 #1
输入 #1
7 0
0 0 1 -1 -1 -1 1
输出 #1
2
3 1 3
2 1 7
说明/提示
在第一个样例中,数组 的变化如下:
- 执行类型 3 的操作,参数为 、 后,数组变为 ;
- 执行类型 2 的操作,参数为 、 后,数组变为 。
评分标准
设某测试用例的最短操作次数为 ,你的解使用的操作次数为 。
- ( 分):;
- ( 分):若 则视为正确。可以证明在给定约束下总存在不超过 次操作的解;
- ( 分):若 则视为正确;
- ( 分):若 则视为正确;
- ( 分):,且保证所有最短操作序列仅包含类型 2 的操作;
- ( 分):保证所有最短操作序列仅包含类型 2 的操作;
- ( 分):;
- ( 分):无额外限制。