当前位置: 首页 > news >正文

Educational Codeforces Round 127 D. Insert a Progression

Insert a Progression

time limit per test: 2 second
memory limit per test: 256 megabytes
input: standard input
output: standard output

You are given a sequence of n n n integers a 1 , a 2 , … , a n a_1, a_2, \dots, a_n a1,a2,,an. You are also given x x x integers 1 , 2 , … , x 1, 2, \dots, x 1,2,,x.

You are asked to insert each of the extra integers into the sequence a a a. Each integer can be inserted at the beginning of the sequence, at the end of the sequence, or between any elements of the sequence.

The score of the resulting sequence a ′ a' a is the sum of absolute differences of adjacent elements in it ( ∑ i = 1 n + x − 1 ∣ a i ′ − a i + 1 ′ ∣ ) \left(\sum \limits_{i=1}^{n+x-1} |a'_i - a'_{i+1}|\right) (i=1n+x1aiai+1).

What is the smallest possible score of the resulting sequence a ′ a' a?

Input

The first line contains a single integer t t t ( 1 ≤ t ≤ 1 0 4 1 \le t \le 10^4 1t104) — the number of testcases.

The first line of each testcase contains two integers n n n and x x x ( 1 ≤ n , x ≤ 2 ⋅ 1 0 5 1 \le n, x \le 2 \cdot 10^5 1n,x2105) — the length of the sequence and the number of extra integers.

The second line of each testcase contains n n n integers a 1 , a 2 , … , a n a_1, a_2, \dots, a_n a1,a2,,an ( 1 ≤ a i ≤ 2 ⋅ 1 0 5 1 \le a_i \le 2 \cdot 10^5 1ai2105).

The sum of n n n over all testcases doesn’t exceed 2 ⋅ 1 0 5 2 \cdot 10^5 2105.

Output

For each testcase, print a single integer — the smallest sum of absolute differences of adjacent elements of the sequence after you insert the extra integers into it.

Example

i n p u t \tt input input
4
1 5
10
3 8
7 2 10
10 2
6 1 5 7 3 3 9 10 10 1
4 10
1 3 1 2
o u t p u t \tt output output
9
15
31
13

Tutorial

由题意易得,对于数组 a a a 中已有的数不能改变,此时差值为 ∑ i = 1 ∣ a ∣ a b s ( a i − a i − 1 ) \sum_{i = 1}^{|a|}abs(a_i - a_{i - 1}) i=1aabs(aiai1),其中 ∣ a ∣ |a| a 表示数组 a a a 的长度

在任意两个数 a i a_i ai a i + 1 a_{i + 1} ai+1 之间,满足 a i ≤ x ≤ a i + 1 a_i \le x \le a_{{i + 1}} aixai+1 条件的 x x x 对答案都不会产生影响,因此插入满足 min ⁡ ( a ) ≤ x ≤ max ⁡ ( a ) \min(a) \le x \le \max(a) min(a)xmax(a) 条件的 x x x 均不会对答案产生影响,我们只需要考虑小于 min ⁡ ( a ) \min(a) min(a) 的数和大于 max ⁡ ( a ) \max(a) max(a) 的数对答案会产生什么影响即可

对于小于 min ⁡ ( a ) \min(a) min(a) 的数:

  • 如果将 1 , 2 , … , min ⁡ ( a ) − 1 1,2,\dots,\min(a) - 1 1,2,,min(a)1 正序插入到整个数列 a a a 的最前方,产生的影响为 a b s ( a 0 − 1 ) abs(a_0 - 1) abs(a01)
  • 如果将 min ⁡ ( a ) − 1 , min ⁡ ( a ) − 2 , … , 2 , 1 \min(a) - 1, \min(a) - 2, \dots, 2, 1 min(a)1,min(a)2,,2,1 倒序插入到整个数列 a a a 的最后方,产生的影响为 a b s ( a ∣ a ∣ − 1 ) abs(a_{|a|} - 1) abs(aa1),其中 ∣ a ∣ |a| a 表示数组 a a a 的长度
  • 如果将 1 , 2 , … , min ⁡ ( a ) − 1 1,2,\dots,\min(a) - 1 1,2,,min(a)1 按序插入到数组 a a a 中间,产生的影响为 ( min ⁡ ( a ) − 1 ) × 2 (\min(a) - 1) \times 2 (min(a)1)×2

对于大于 max ⁡ ( a ) \max(a) max(a)​ 的数:

  • 如果将 x − 1 , x − 2 , … , max ⁡ ( a ) + 1 x - 1, x - 2, \dots, \max(a) + 1 x1,x2,,max(a)+1 倒序插入到整个数列 a a a 的最前方,产生的影响为 a b s ( x − a 0 ) abs(x - a_0) abs(xa0)
  • 如果将 max ⁡ ( a ) + 1 , max ⁡ ( a ) + 2 , … , x \max(a) + 1,\max(a) + 2,\dots,x max(a)+1,max(a)+2,,x 正序插入到整个数列 a a a 的最后方,产生的影响为 a b s ( x − a ∣ a ∣ ) abs(x - a_{|a|}) abs(xaa),其中 ∣ a ∣ |a| a 表示数组 a a a 的长度
  • 如果将 1 , 2 , … , min ⁡ ( a ) − 1 1,2,\dots,\min(a) - 1 1,2,,min(a)1 按序插入到数组 a a a 中间,产生的影响为 ( x − max ⁡ ( a ) ) × 2 (x - \max(a)) \times 2 (xmax(a))×2,当然,如果 max ⁡ ( a ) > x \max(a) > x max(a)>x,此时影响为 0

综上所述,对于每一个数组 a a a x x x,答案为

{ ∑ i = 1 ∣ a ∣ a b s ( a i − a i − 1 ) min ⁡ ( a b s ( x − a 0 ) , a b s ( x − a ∣ a ∣ ) , max ⁡ ( 0 , ( x − max ⁡ ( a ) ) × 2 ) ) min ⁡ ( a b s ( a 0 − 1 ) , a b s ( a ∣ a ∣ − 1 ) , ( min ⁡ ( a ) − 1 ) × 2 ) \left\{\begin{matrix} \sum_{i = 1}^{|a|}abs(a_i - a_{i - 1}) \\ \min(abs(x - a_0), abs(x - a_{|a|}), \max(0, (x - \max(a)) \times 2)) \\ \min(abs(a_0 - 1), abs(a_{|a|} - 1), (\min(a) - 1) \times 2) \end{matrix}\right. i=1aabs(aiai1)min(abs(xa0),abs(xaa),max(0,(xmax(a))×2))min(abs(a01),abs(aa1),(min(a)1)×2)

的和

此解法时间复杂度为 O ( n ) \mathcal O(n) O(n),即求 ∑ i = 1 ∣ a ∣ a b s ( a i − a i − 1 ) \sum_{i = 1}^{|a|}abs(a_i - a_{i - 1}) i=1aabs(aiai1) 时的时间复杂度

Solution

import sys
input = lambda: sys.stdin.readline().strip()output = []for _ in range(int(input())):n, x = map(int, input().split())a = list(map(int, input().split()))ans = sum(abs(a[i] - a[i + 1]) for i in range(n - 1))mx, mn = max(a), min(a)up = min(abs(x - a[0]), abs(x - a[-1]), (0 if mx > x else (x - mx) * 2))down = min(abs(a[0] - 1), abs(a[-1] - 1), (mn - 1) * 2)output.append(ans + up + down)print('\n'.join(map(str, output)))
http://www.lryc.cn/news/358629.html

相关文章:

  • 树莓集团:构筑全国数字影像生态链
  • 物联网——TIM定时器、PWM驱动呼吸灯、舵机和直流电机
  • Elasticsearch 认证模拟题 -2
  • Java-----Comparable接口和Comparator接口
  • 通信技术体会
  • Linux系统安全及其应用
  • JVM内存划分类加载的过程双亲委派模型的详解
  • Java异常详解
  • C++入门3——类与对象2(类的6个默认成员函数)
  • CobaltStrike基本渗透
  • 【linux深入剖析】进程间通信
  • 关系数据库:关系模式
  • 医学图像处理质量的评价方法
  • Ehcache Java 缓存框架
  • 详解Spring IoCDI(二)
  • 说明白计算机网络之TCP的流量控制与拥塞控制之慢开始算法与拥塞避免算法
  • 这款信创FTP软件,可实现安全稳定的文件传输
  • 代码随想录算法训练营第十天|232.用栈实现队列、225. 用队列实现栈
  • STM32 IIC协议
  • Java生成随机数的几种方式
  • 【面试】什么是Java虚拟机
  • Go 语言的基本构成、要素与编写规范
  • 从了解到掌握 Spark 计算框架(二)RDD
  • 香橙派OrangePi AIpro上手笔记——之USB摄像头目标检测方案测试(三)
  • 【git】常用命令
  • JavaWeb_MySQL数据库
  • 中国BI步入增长大周期,腾讯云ChatBI加速AI+BI融合
  • 揭秘Python:下划线的特殊用法,你绝对想不到!
  • 深入探索Java世界中的Jackson魔法:玩转JsonNode
  • 为什么要使用动态代理IP?