#include <bits/stdc++.h>
using namespace std;
#include "grader.h"
#define int long long
int dbg=0;
struct Nd{
int a,d;
Nd*l,*r;
};
struct ST{
int n;
Nd*root;
ST(int n):n(n),root(nullptr){
}
void update(Nd*&i,int l,int r,int ll,int rr){
if(l>rr||r<ll){
return;
}
if(!i){
i=new Nd{};
}
if(l>=ll&&r<=rr){
i->a+=l-ll;
i->d+=1;
return;
}
update(i->l,l,(l+r)/2,ll,rr);
update(i->r,(l+r)/2+1,r,ll,rr);
}
void update(int ll,int rr){
update(root,0,n-1,ll,rr);
}
int query(Nd*&i,int l,int r,int ii){
if(!i||l>ii||r<ii){
return 0;
}
int ans=i->a+i->d*(ii-l);
if(l==r){
return ans;
}
if(ii<=(l+r)/2){
ans+=query(i->l,l,(l+r)/2,ii);
}
else{
ans+=query(i->r,(l+r)/2+1,r,ii);
}
return ans;
}
int query(int ii){
return query(root,0,n-1,ii);
}
};
signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int N=getN(),K=getK(),M=4e8;
ST a(M+1),b(M+1);
auto calc=[&](int x)->int{
return a.query(x)+b.query(M/2-(x+K));
};
for(int i=0;i<N;i++){
int y=Data();
a.update(y,M);
b.update(M/2-y,M);
int l=0,h=1e8;
while(h-l>=3){
int m1=l+(h-l)/3;
int m2=h-(h-l)/3;
if(calc(m1)<=calc(m2)){
h=m2;
}
else{
l=m1;
}
}
int ans=1e18;
for(int i=l;i<=h;i++){
ans=min(ans,calc(i));
}
Solution(ans);
}
return 0;
}