#include <iostream>
#include <set>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
long long n,k;
cin>>n>>k;
long long a[n];
for(long long i=0;i<n;i++)
{
cin>>a[i];
}
if(k == 1)
{
for(long long i=0;i<n;i++)
{
cout<<0<<" ";
}
return 0;
}
vector<long long> V;
long long sum=0;
for(long long i=0;i<k;i++)
{
V.push_back(a[i]);
sum+=a[i];
}
sort(V.begin(),V.end());
multiset<long long> LS;
multiset<long long> RS;
long long sum1 =0;
long long sum2=0;
if(k%2 == 0)
{
for(long long i=0;i<V.size()/2;i++)
{
LS.insert(V[i]);
sum1+=V[i];
}
for(long long i=V.size()/2;i<V.size();i++)
{
RS.insert(V[i]);
sum2+=V[i];
}
long long median = *LS.rbegin();
long long cost=0;
cost+=median*LS.size() - sum1;
cost+=sum2-median*RS.size();
cout<<cost<<" ";
for(long long i=k;i<n;i++)
{
if(LS.find(a[i-k]) != LS.end())
{
LS.erase(LS.find(a[i-k]));
sum1 -= a[i-k];
LS.insert(*RS.begin());
sum1 += *RS.begin();
sum2-= *RS.begin();
RS.erase(RS.begin());
}
else if(RS.find(a[i-k]) != RS.end())
{
RS.erase(RS.find(a[i-k]));
sum2 -= a[i-k];
}
if(LS.size() > 0 && a[i] >= *(LS.rbegin()))
{
RS.insert(a[i]);
sum2+=a[i];
}
else
{
LS.insert(a[i]);
sum1+=a[i];
}
if(LS.size() < RS.size())
{
LS.insert(*(RS.begin()));
sum1+=*RS.begin();
sum2-=*RS.begin();
RS.erase(RS.begin());
}
else if(LS.size() > RS.size())
{
while((LS.size() - RS.size()) > 0)
{
RS.insert(*(LS.rbegin()));
sum2+=*(LS.rbegin());
sum1-=*(LS.rbegin());
LS.erase(--LS.end());
}
}
//cout<<"LS.size()="<<LS.size()<<" RS.size()="<<RS.size()<<endl;
median=*LS.rbegin();
cost=0;
cost+=median*LS.size() - sum1;
cost+=sum2-median*RS.size();
cout<<cost<<" ";
}
}
else
{
for(long long i=0;i<V.size()/2+1;i++)
{
LS.insert(V[i]);
sum1+=V[i];
}
for(long long i=V.size()/2+1;i<V.size();i++)
{
RS.insert(V[i]);
sum2+=V[i];
}
long long median = *LS.rbegin();
long long cost=0;
cost+=median*LS.size() - sum1;
cost+=sum2-median*RS.size();
cout<<cost<<" ";
for(long long i=k;i<n;i++)
{
if(LS.find(a[i-k]) != LS.end())
{
LS.erase(LS.find(a[i-k]));
sum1-=a[i-k];
LS.insert(*RS.begin());
sum1+=*RS.begin();
sum2-=*RS.begin();
RS.erase(RS.begin());
}
else if(RS.find(a[i-k]) != RS.end())
{
RS.erase(RS.find(a[i-k]));
sum2 -= a[i-k];
}
if(LS.size() > 0 && a[i] >= *(LS.rbegin()))
{
RS.insert(a[i]);
sum2+=a[i];
}
else
{
LS.insert(a[i]);
sum1+=a[i];
}
if(LS.size() < RS.size())
{
LS.insert(*(RS.begin()));
sum1+=*(RS.begin());
sum2-=*(RS.begin());
RS.erase(RS.begin());
}
else if(LS.size() > RS.size())
{
while((LS.size() - RS.size()) > 1)
{
RS.insert(*(LS.rbegin()));
sum2+=*(LS.rbegin());
sum1-=*(LS.rbegin());
LS.erase(--LS.end());
}
}
//cout<<"LS.size()="<<LS.size()<<" RS.size()="<<RS.size()<<endl;
median = *LS.rbegin();
cost=0;
cost+=median*LS.size() - sum1;
cost+=sum2-median*RS.size();
cout<<cost<<" ";
}
}
return 0;
}