버블

NYPC 2025 · Round 2-B

NN개의 항을 가진 수열 A=[A1,A2,,AN]A = \left[ A_1, A_2, \cdots, A_N \right]이 있다. 수열의 인접한 항을 교환하는 작업을 최대 KK번 수행하여 ANA1A_N - A_1의 값을 가장 크게 만들고 싶다.

KK번 이하의 작업으로 만들 수 있는 ANA1A_N - A_1의 최댓값을 출력하는 프로그램을 작성하라.

입력 형식

첫 줄에 수열의 길이를 나타내는 정수 NN과 교환 작업의 최대 횟수를 나타내는 정수 KK가 주어진다. (2N200000;2 \le N \le 200\,000; 0K2N0 \le K \le 2N)

그다음 줄에 수열의 NN개의 항의 초깃값이 공백으로 구분되어 차례대로 주어진다. 이 값은 모두 11 이상 10000000001\,000\,000\,000 이하의 정수다.

출력 형식

첫 줄에 만들 수 있는 ANA1A_N - A_1의 최댓값을 출력한다.

예제

입력

5 2 3 2 1 5 2

출력

3

예제 설명

예제에서, 첫 번째와 두 번째의 3322를 교환하면 수열은 [2,3,1,5,2][2, 3, 1, 5, 2]가 된다. 다시, 네 번째와 다섯 번째의 5522를 교환하면 수열은 [2,3,1,2,5][2, 3, 1, 2, 5]가 된다. 이 경우가 ANA1A_N - A_1을 가장 크게 만들 수 있는 방법이므로 답은 33이다.

채점 방식

입력 케이스들은 다음과 같은 종류로 구별되며, 한 종류의 케이스를 다 맞혀야 그 종류에 배정된 점수를 받을 수 있다.

종류 1: 17

N5N \le 5

종류 2: 11

K1K \le 1

종류 3: 13

A1=1A_1 = 1

종류 4: 31

N3000N \le 3\,000

종류 5: 28

모든 입력 케이스가 주어진다.

해설