rt,WhyWA#3
//# pragma GCC optimize("Ofast,no-stack-protector")
//
//# pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
# include <bits/stdc++.h>
# define I return
# define AK 0
# define IOI ;
using namespace std;
typedef long long ll;
typedef pair <int, int> pii;
int t, n, m, k, a[100005], b[100005], tr[100005];
ll l, r, mid, best;
map <int, int> mp;
void add (int x) {
while (x)
++ tr[x], x ^= x & -x;
return ;
}
void del (int x) {
while (x)
-- tr[x], x ^= x & -x;
return ;
}
int find (int x) {
int sum = 0;
while (x <= m)
sum += tr[x], x += x & -x;
return sum;
}
bool check () {
int tot = 0, x, lst = 1;
ll now = 0;
for (int i = 1; i <= n; ++ i) {
x = find (a[i] + 1);
// cerr << lst << '~' << i << ':';
if (now + x > mid) {
// cerr << "1 ";
for (int j = lst; j < i; ++ j)
del (a[j]);
// cerr << "2 ";
++ tot;
now = 0;
lst = i;
add (a[i]);
// cerr << "3 ";
} else
add (a[i]), now += x;
// cerr << "4\n";
// cerr << lst << '~' << i << ':' << tot << '\n';
}
for (int i = lst; i <= n; ++ i)
del (a[i]);
return ++ tot <= k;
}
int main () {
ios::sync_with_stdio (0);
cin.tie (0);
cout.tie (0);
cin >> t;
while (t --) {
cin >> n >> k;
for (int i = 1; i <= n; ++ i)
cin >> a[i], b[i] = a[i];
mp.clear ();
sort (b + 1, b + n + 1), m = unique (b + 1, b + n + 1) - b;
for (int i = 1; i <= m; ++ i)
mp[b[i]] = i;
for (int i = 1; i <= n; ++ i)
a[i] = mp[a[i]];
// for (int i = 1; i <= n; ++ i) cerr << a[i] << ' ';
l = 0, r = n * (n - 1ll) / 2;
while (l <= r) {
mid = l + r >> 1;
// cerr << l << '~' << r << ':' << mid << '\n';
if (check ())
r = mid - 1, best = mid;
else
l = mid + 1;
}
cout << best << '\n';
}
I AK IOI
}
/*
1
5 2
1 3 2 5 4
*/