#include #define int long long using namespace std; const int N=1000010; const int INF=0x3f3f3f3f3f3f3f3f; int n,k; int ans=INF; int a[N],b[N]; struct BIT{ int t[N]; int lowbit(int x){return x&-x;} void update(int x,int y){ for(int i=x;i<=n;i+=lowbit(i))t[i]+=y; return; } int ask(int x){ int res=0; for(int i=x;i>=1;i-=lowbit(i))res+=t[i]; return res; } int query(int l,int r){ return ask(r)-ask(l-1); } }T,S; signed main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); // freopen("farmland.in","r",stdin); // freopen("farmland.out","w",stdout); cin>>n>>k; vectorv; for(int i=1;i<=n;i++){ cin>>a[i]; b[i]=a[i]; v.push_back(a[i]); } sort(v.begin(),v.end()); v.erase(unique(v.begin(),v.end()),v.end()); for(int i=1;i<=n;i++)a[i]=lower_bound(v.begin(),v.end(),a[i])-v.begin()+1; for(int i=1;i<=n;i++){ T.update(a[i],1); S.update(a[i],b[i]); if(ik){ T.update(a[i-k],-1); S.update(a[i-k],-b[i-k]); } int num=0; int l=1,r=n,mid; while(l<=r){ mid=(l+r)>>1; if(T.ask(mid)>=(k+1)/2){ num=mid; r=mid-1; } else l=mid+1; } int L=num*T.ask(num)-S.ask(num); int R=(S.ask(n)-S.ask(num))-num*(T.ask(n)-T.ask(num)); ans=min(ans,L+R); } cout<