加入移除时分别计算贡献
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn=1e5+5;
int sum1[maxn],sum2[maxn];
int a[maxn];
int m,n;
int lowbit(int x){return x&-x;}
ll get1(int x)
{
ll res=0;
while(x){res+=sum1[x];x-=lowbit(x);}
return res;
}
ll get2(int x)
{
ll res=0;
while(x){res+=sum2[x];x-=lowbit(x);}
return res;
}
void up1(int x,int k)
{
while(x<=n)sum1[x]+=k,x+=lowbit(x);
}
void up2(int x,int k)
{
while(x<=n)sum2[x]+=k,x+=lowbit(x);
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
ll res=0;
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
for(int i=0;i<=n;i++)sum1[i]=sum2[i]=0;
for(int i=n;i>0;i--)
{
res+=get1(a[i]-1);
up1(a[i],1);
}
ll ans=res;
int l=1,r=1;
for(l=1;l<=n-m+1;l++)
{
while(r<=n&&r-l<m)
{
up1(a[r],-1);
res-=get1(a[r]-1);
res-=(l-1-get2(a[r]));
r++;
}
ans=min(ans,res);
res+=(l-1-get2(a[l]));
res+=get1(a[l]-1);
up2(a[l],1);
}
cout<<ans<<endl;
}
}