#6813. 数组变形记

数组变形记

题目背景

小蓝在掌握了数组的基础操作后,设计了一个奇妙的数组变形流水线。他希望通过一系列简单的规则,将一个普通的数组转变成全新的样子。请你编写程序,模拟这个完整的变形过程。

题目描述

给定一个长度为 NN 的正整数数组 AA 以及三个额外参数 L,R,KL, R, K,请严格按照以下五个步骤对数组进行变换:

  1. 去重保留
    从左到右遍历数组 AA,对于值重复出现的元素,只保留第一次出现的位置,删除后面所有与其值相同的元素。将得到的新数组记为 BB。题目保证 BB 的长度至少为 RR

  2. 区间反转
    给定参数 L,RL, R1LRB1 \le L \le R \le |B|),将数组 BB 中第 LL 到第 RR 个元素(下标从 11 开始)之间的部分反转,其余部分保持不变,得到数组 CC

  3. 奇偶分离
    将数组 CC 中的所有奇数按原有的相对顺序移动到数组的前半部分,所有偶数按原有的相对顺序移动到数组的后半部分,得到数组 DD

  4. 相邻合并
    对数组 DD 的元素进行两两合并:

    • 如果 DD 的长度为偶数,将第 11 与第 22 个元素相加、第 33 与第 44 个元素相加,……,得到长度减半的新数组 EE
    • 如果 DD 的长度为奇数,先将前 D1|D|-1 个元素按上述方式两两相加,最后剩下的那一个元素直接接在末尾,得到数组 EE
  5. 循环右移
    给定非负整数 KK,将数组 EE 循环右移 KK 位。也就是说,每个元素向右移动 KK 个位置,移出数组尾部的元素从数组头部重新进入。得到最终数组 FF

请你输出最终数组 FF,以及 FF 中所有元素的总和、最大值与最小值之差(极差)。

输入格式

第一行包含四个整数 N,L,R,KN, L, R, K,分别表示初始数组的长度、区间反转的左右端点,以及循环右移的步数。
第二行包含 NN 个正整数,表示初始数组 AA 的各个元素,数与数之间用空格隔开。

输出格式

共三行:
第一行输出最终数组 FF 的所有元素,用空格分隔。
第二行输出一个整数,表示 FF 所有元素的总和。
第三行输出一个整数,表示 FF 中最大值与最小值之差(极差)。若 FF 中只有一个元素,极差视为 00

样例

7 2 3 1
2 3 2 5 3 8 2
10 8
18
2

样例解释

初始数组 A=[2,3,2,5,3,8,2]A = [2, 3, 2, 5, 3, 8, 2]

  1. 去重保留:2,32, 3 依次保留,第三个 22 删除,55 保留,第五个 33 删除,88 保留,最后的 22 删除。得到 B=[2,3,5,8]B = [2, 3, 5, 8]
  2. L=2,R=3L=2, R=3:反转第 22 到第 33 个元素。BB 中第 22 个是 33,第 33 个是 55,反转后变为 [2,5,3,8][2, 5, 3, 8],即 CC
  3. 奇偶分离:奇数部分为 [5,3][5, 3],偶数部分为 [2,8][2, 8],拼接得到 D=[5,3,2,8]D = [5, 3, 2, 8]
  4. 相邻合并:长度 44 为偶数,相邻相加 (5+3)=8(5+3)=8(2+8)=10(2+8)=10,得 E=[8,10]E = [8, 10]
  5. 循环右移 11 位:[8,10][8, 10] 右移 11 位后最后一个 1010 移动到前面,得到 F=[10,8]F = [10, 8]

FF 的元素和为 10+8=1810+8=18;最大值为 1010,最小值为 88,极差为 22

数据范围

  • 1N10001 \le N \le 1000
  • 1LR1 \le L \le R \le (去重后数组的长度)
  • 0K1060 \le K \le 10^6
  • 数组中的元素均为不超过 10410^4 的正整数。