#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef pair P; typedef long long ll; typedef long double ld; const int inf=1e9+7; const ll longinf=1LL<<60; #define REP(i,m,n) for(ll i=(int)(m) ; i < (int) (n) ; ++i ) #define rep(i,n) REP(i,0,n) #define F first #define S second constexpr char ln = '\n'; const int mx=100010; const ll mod=1e9+7; struct UnionFind { vector par,sizes; // par[i]:iの親の番号(ex)par[3]=2 : 3の親が2 UnionFind(int n) : par(n),sizes(n,1) { //最初は全てが根であるとして初期化 for(int i=0; i> n >> a >> b; vector x(n); rep(i,n){ cin >> x[i]; } UnionFind uf(n); for(int i=0,j=1,k=1; i abs(x[i]-x[j])){ j++; } if(j==n) break; while(k!=n && abs(x[i]-x[k])<=b){ k++; } k--; if(a <= abs(x[i]-x[j]) && abs(x[i]-x[k]) <= b){ REP(t,j,k+1){ uf.unite(i,t); } } } rep(i,n){ cout << uf.size(i) << ln; } return 0; }