#loj5221. 「UOI 2023 Stage 4 Day1」数组与部分和
「UOI 2023 Stage 4 Day1」数组与部分和
[AdditionalFile5221.zip](file://AdditionalFile5221.zip?type=additional_file)
#5221. 「UOI 2023 Stage 4 Day1」数组与部分和
标签: 传统 | 时间限制: 2000 ms | 内存限制: 256 MiB |
题目描述
题目译自 Ukrainian Olympiads in Informatics 2023 Stage 4 Day1 T4. Масив і часткові суми
对于一个长度为 的整数数组 ,其前缀和数组是一个长度为 的数组 ,其中 。
对于一个长度为 的整数数组 ,其后缀和数组是一个长度为 的数组 ,其中 。
我们定义数组 的归一化操作为对每个 ,执行赋值 。
给定一个长度为 的整数数组 。
你可以执行以下三种类型的操作:
- 将数组 的每个元素替换为其相反数(即对 执行赋值 );
- 选择数组 的任意子区间,将其替换为该子区间的前缀和数组,然后对数组 进行归一化;
- 选择数组 的任意子区间,将其替换为该子区间的后缀和数组,然后对数组 进行归一化。
找出使数组 的所有元素变为非负所需的最短操作序列。
注意,在某些测试块中,允许找到非最短的操作序列。
输入格式
输入的第一行包含两个整数 和 ,分别表示数组的长度和子任务编号。
第二行包含 个整数 ,表示数组的元素。
输出格式
输出第一行包含一个整数 ,表示使数组 的所有元素变为非负所需的最小操作次数。
接下来的 行,输出操作的描述。第一类操作的描述格式为 1。第二类和第三类操作的描述格式分别为 2 l 和 3 l r,其中 和 表示当前操作子区间的左边界和右边界。
如果存在多个正确答案,可以输出任意一个。
样例
输入
7 0
0 0 1 -1 -1 -1 1
输出
2
3 1 3
2 1 7
在第一个样例中,数组 经历了两次变化:
- 执行第三类操作,参数为 ,,数组 变为 ;
- 执行第二类操作,参数为 ,,数组 变为 。
数据范围与提示
设对于某个测试点,所需的最小操作次数为 ,而你的解决方案使用的操作次数为 。
详细子任务附加限制及分值如下表所示:
| 子任务 | 分值 | 附加限制 |
|---|---|---|
| 解决方案视为正确,如果 。可以证明,在给定约束下总是存在不超过 次操作的序列 | ||
| 解决方案视为正确,如果 | ||
| 解决方案视为正确,如果 | ||
| ;保证所有最短操作序列仅包含第二类操作 | ||
| 保证所有最短操作序列仅包含第二类操作 | ||
| 无附加限制 |