#include #include #include using namespace std; int main() { int N, K; cin >> N >> K; vector A(N); for (int i = 0; i < N; i++) cin >> A[i]; // 1. 各グループを抽出 vector> groups(K); for (int i = 0; i < N; i++) { groups[i % K].push_back(A[i]); } // 2. 全体ソート後の各グループの状態を作る vector S = A; sort(S.begin(), S.end()); vector> target_groups(K); for (int i = 0; i < N; i++) { target_groups[i % K].push_back(S[i]); } long long ans = 0; for (int i = 0; i < K; i++) { // 判定: グループ内の数字の集合が一致するか vector sorted_group = groups[i]; sort(sorted_group.begin(), sorted_group.end()); if (sorted_group != target_groups[i]) { cout << -1 << endl; return 0; } // 3. 転倒数を計算 (シンプルに二重ループ) // ※ Nが10万などの場合はBITが必要 for (int j = 0; j < groups[i].size(); j++) { for (int l = j + 1; l < groups[i].size(); l++) { if (groups[i][j] > groups[i][l]) ans++; } } } cout << ans << endl; return 0; }