#4533. 最少翻转操作数
最少翻转操作数
当前没有测试数据。
题目描述
给你一个整数 和一个在范围 以内的整数 ,它们表示一个长度为 且下标从 开始的数组 ,数组中除了下标为 处是 以外,其他所有数都是 。
同时给你一个整数数组 ,它包含数组中的一些位置。 中第 个位置表示 ,题目保证 。
你可以对 进行 若干次 操作。一次操作中,你选择大小为 的一个 子数组 ,并将它 翻转 。在任何一次翻转操作后,你都需要确保 中唯一的 不会到达任何 中的位置。换句话说, 始终 保持 。
请你输出一个数组 ,对于 之间的任意下标 , 是将 放到位置 处的 最少 翻转操作次数,如果无法放到位置 处,此数为 。
子数组 指的是一个数组里一段连续 非空 的元素序列。 对于所有的 , 相互之间独立计算。 将一个数组中的元素 翻转 指的是将数组中的值变成 相反顺序 。
输入格式
第一行,三个空格隔开的整数分别表示 、 和 ,语义同题目描述;
第二行第一个数为 数组的长度 ,接下来 空格隔开的 个数,表示 数组的元素。
输出格式
一行空格隔开的 个数,表示 数组。
样例
样例 1:
4 0 4
2 1 2
0 -1 -1 1
解释:
,所以只有一种可行的翻转操作,就是将整个数组翻转。一开始 在位置 处,所以将它翻转到位置 处需要的操作数为 。
我们不能将 翻转到 中的位置,所以位置 和 处的答案都是 。
通过一次翻转操作,可以将 放到位置 处,所以位置 的答案是 。
样例 2:
5 0 3
2 2 4
0 -1 -1 -1 -1
解释:
这个例子中 一开始在位置 处,所以此下标的答案为 。
翻转的子数组长度为 , 此时在位置 处,所以我们可以翻转子数组 ,但翻转后的下标 在 中,所以不能执行此操作。
由于 没法离开位置 ,所以其他位置的答案都是 。
样例 3:
4 2 1
3 0 1 3
-1 -1 0 -1
解释:
这个例子中,我们只能对长度为 1 的子数组执行翻转操作,所以 1 无法离开初始位置。
提示:
- 。