solution

$\bmod K$で分けてbubble sort。$O(N)$。

$i$番目のものは$j = i \pmod K$であるような$j$番目のものとしか交換できない。 よって列を$K$本の列に分ける。 特に、それらの中で隣合う要素としか交換できないので、これはbubble sortの交換回数を数える問題になる。 ただし、各列でのsortが大域的に見てsortになっていなければ失敗。

implementation

#!/usr/bin/env python3
# input
n, k = map(int,input().split())
xs = list(map(int,input().split()))
# compress
ys = list(range(n))
ys.sort(key=lambda y: xs[y])
zs = [None] * n
for i in range(n):
    zs[ys[i]] = i
# sort
ans = 0
yss = [zs[i::k] for i in range(k)]
for i, ys in enumerate(yss):
    for j, y in enumerate(ys):
        ans += len(list(filter(lambda x: y < x, ys[:j]))) # bubble sort locally
    ys.sort()
    if ys != list(range(i,n,k))[:len(ys)]:
        ans = -1 # failure globally
        break
print(ans)