#include #define rep(X,N) for(ll X = 0LL; X < (N); X++) #define ALL(V) (V).begin(),(V).end() using namespace std; typedef long long ll; const double PI = 3.1415926535897932384626; const ll MODN = 1000000007; const ll MODN2 = 998244353; const double EPS = 1e-10; //ソート済みの関数と値を入力すると //値が存在するかのboolと値未満の個数(trueなら値のあるでもあるindex)を返す template auto binsearch_idx(vector &v, T val, ll size){ // leftがlessの右端のindex,rightがeq,greaterの左端のindex ll left = -1, right = size; while( abs(right - left) > 1) { ll mid = (left + right) / 2; if (v[mid] < val) left = mid; else right = mid; } // vにvalが存在するなら,{true, 左端のindex} // 存在しないなら,{false, val未満の個数} return (make_pair(v[right] == val, right)); } int main(){ int n, d; cin >> n >> d; vector a(n); vector v(n); rep(i, n){ cin >> a[i]; v[i] = a[i]; } sort(ALL(v)); rep(i, n){ int tmp = a[i] - d; pair p = binsearch_idx(v, tmp, n); cout << p.second << "\n"; } return 0; }