Hduacm—5497

时间:2024-07-12 17:05:14
 #include <cstring>
#include <cstdio>
#include <iostream> using namespace std; typedef long long LL;
const int maxn = 1e5+;
int a[maxn];
struct Bittree
{
int tr[maxn];
void init()
{
memset(tr,,sizeof(tr));
}
void update(int x,int v)
{
for (;x<maxn;x+=(x&-x)) tr[x] += v;
}
int query(int x)
{
int res = ;
for (;x;x-=(x&-x)) res += tr[x];
return res;
}
}L,R; void slove()
{
int i,n,m;
LL cur = ,ans;
L.init();R.init();
scanf("%d%d",&n,&m);
for (i = ;i<n;i++)
scanf("%d",&a[i]);
for (int i = n-;i>=m;--i)
{
cur += R.query(a[i]-);
R.update(a[i],);
}
ans = cur; for (i = ;i+m<n;++i)
{
R.update(a[i+m],-);
cur+=R.query(a[i]-);
cur-=R.query(a[i+m]-);
cur+=L.query(n+-(a[i]+));
cur-=L.query(n+-(a[i+m]+));
L.update(n+-(a[i]),);
ans = min(ans,cur);
}
printf("%I64d\n",ans);
} int main()
{
int T;
scanf("%d",&T);
while (T--)
{
slove();
}
return ;
}

代码