""" #1391 |x-A[i]| の和のグラフ N-K個を正負反転させ、範囲内の最小値を最小化 最小値となるのは、必ずAに属すXの場合である。 Aをソートしてみる XをあるAに固定したとき、値を最小化するにはどれを裏返せばいいか考える 遠いほうからN-K個を裏返せば良いことがわかる 後はdpをすれば解ける 左側の和、右側の和をもっておき、そこから全部+の場合の答えを計算 遠いほうからN-K個のデータを用いて計算 """ import sys from sys import stdin N,K = map(int,stdin.readline().split()) k = N-K A = list(map(int,stdin.readline().split())) Rsum = sum(A) Lsum = 0 ans = float("inf") Rlis = A[-k:] Rlis.reverse() RLS = sum(Rlis) Llis = [] LLS = 0 for i in range(N): #すべて+の場合の答えを計算 ori = (A[i] * i - Lsum) + (Rsum - A[i] * (N-i)) #遠いほうからk個を更新する while len(Rlis) > 0 and A[i] - A[len(Llis)] > Rlis[-1] - A[i]: Llis.append(A[len(Llis)]) LLS += Llis[-1] RLS -= Rlis[-1] del Rlis[-1] #逆転させる ori -= 2 * ( ( A[i]*len(Llis) - LLS ) + ( RLS - A[i]*len(Rlis) ) ) ans = min(ans , ori) #Rsum,Lsumの更新 Rsum -= A[i] Lsum += A[i] print (ans)