#include #include #include #include #include #include #include #include #include using namespace std; using ull = unsigned long long; bool check(int index1,int index2,int k) { int sub = abs(index1 - index2); if(sub % k == 0) return true; else return false; } void bubble_check(vector& x,int& count) { for(int i =0; i < x.size() -1; ++i) { for(int j = x.size()-1; j > i; --j) { if(x.at(j-1) > x.at(j)) { swap(x.at(j),x.at(j-1)); ++count; } } } } int main() { ull n,k; cin >> n >> k; vector a(n); int count = 0; for(auto&& x : a) { cin >> x; } vector sorted_a = a; sort(sorted_a.begin(),sorted_a.end()); if(k >= n) { if(sorted_a == a) { cout << 0 << endl; return 0; } else { cout << -1 << endl; return 0; } } ull i = 0; vector> hoge(k); for(int i =0; i < n; ++i) { auto iter1 = find(a.begin(), a.end(),a.at(i)); int index1 = distance(a.begin(), iter1); auto iter2 = find(sorted_a.begin(), sorted_a.end(),a.at(i)); int index2 = distance(sorted_a.begin(), iter2); if(!check(index1,index2,k)) { cout << -1 << endl; return 0; } hoge.at(i % k).emplace_back(a.at(i)); } for(auto&& x: hoge) { bubble_check(x,count); } cout << count << endl; }