#include <bits/stdc++.h>
#define int long long
#define pii pair<int,int>
using namespace std;
int n, k, b[100005];
int a[100005];
void add(int x,int y)
{
while(x <= n)
{
b[x] += y;
x += x & -x;
}
}
int query(int x)
{
int res = 0;
while(x)
{
res += b[x];
x -= x & -x;
}
return res;
}
bool check(int mid)
{
int now = 0;
int cnt = 1;
vector<int> nums;
for(int i=1; i<=n; i++)
{
now += query(n) - query(a[i]);
if(now > mid)
{
now = 0;
for(auto i : nums) add(i, -1);
nums.clear();
cnt++;
}
nums.push_back(a[i]);
add(a[i], 1);
}
for(auto i : nums) add(i,-1);
return cnt <= k;
}
void solve()
{
cin >> n >> k;
vector<int> nums(n+5);
for (int i = 1; i <= n; ++i) {
cin>>a[i];
nums.push_back(a[i]);
}
sort(nums.begin(), nums.end());
nums.erase(unique(nums.begin(), nums.end()), nums.end());
for (int i = 1; i <= n; ++i) {
a[i] = (lower_bound(nums.begin(), nums.end(), a[i]) - nums.begin() + 1);
}
int l = 0, r = n * (n - 1) >> 1, ans;
while(l <= r)
{
int mid = l + r >> 1;
if(check(mid))
{
ans = mid;
r = mid - 1;
}
else
l = mid + 1;
}
cout << ans << endl;
}
signed main()
{
int t;
cin >> t;
while(t--)
solve();
return 0;
}
样例没过 AC了