#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; int par[200020]; int root(int x) { if (par[x] == x) { return x; } else { return par[x] = root(par[x]); } } int sum[200020] = {}, ans[200020] = {}; vector x; int main() { int n, a, b; cin >> n >> a >> b; for (int i = 0; i < n; i++) { par[i] = i; int x2; cin >> x2; x.emplace_back(x2); } for (int i = 0; i < n; i++) { auto itr = lower_bound(x.begin(), x.end(), x[i] + a); auto itr1 = upper_bound(x.begin(), x.end(), x[i] + b); if (itr != x.end() && itr != itr1) { int x1 = root(i); int y1 = root(int(itr - x.begin())); if (x1 != y1) { par[x1] = y1; } } sum[int(itr - x.begin())]++; sum[int(itr1 - x.begin())-1]--; } for (int i = 0; i < n; i++) { if (i != 0) { sum[i] += sum[i - 1]; } if (sum[i] > 0) { int x1 = root(i); int y1 = root(i + 1); if (x1 != y1) { par[x1] = y1; } } } for (int i = 0; i < n; i++) { ans[root(i)]++; } for (int i = 0; i < n; i++) { cout << ans[root(i)] << endl; } }