#include #include #define rep(i,n) for(int i=0;i vi; typedef vector vl; typedef vector> vvi; typedef vector> vvl; typedef long double ld; typedef pair P; template std::ostream& operator<<(std::ostream& os, const atcoder::static_modint& a) {os << a.val(); return os;} template istream& operator>>(istream& is, vector& v){int n = v.size(); assert(n > 0); rep(i, n) is >> v[i]; return is;} template ostream& operator<<(ostream& os, const vector& v){int n = v.size(); rep(i, n) os << v[i] << (i == n - 1 ? "\n" : " "); return os;} template ostream& operator<<(ostream& os, const vector>& v){int n = v.size(); rep(i, n) os << v[i] << (i == n - 1 ? "\n" : ""); return os;} // Coodinate Compression // https://youtu.be/fR3W5IcBGLQ?t=8550 template struct CC { bool initialized; vector xs; CC(): initialized(false) {} void add(T x) { xs.push_back(x);} void init() { sort(xs.begin(), xs.end()); xs.erase(unique(xs.begin(),xs.end()),xs.end()); initialized = true; } int operator()(T x) { if (!initialized) init(); return upper_bound(xs.begin(), xs.end(), x) - xs.begin() - 1; } T operator[](int i) { if (!initialized) init(); return xs[i]; } int size() { if (!initialized) init(); return xs.size(); } }; using mint = modint998244353; int main(){ int n; ll m; cin >> n >> m; vl x(n), y(n), h(n); rep(i, n) cin >> x[i] >> y[i] >> h[i]; CC cc_s, cc_t; rep(i, n) cc_s.add((x[i] - (m - h[i])) + y[i]); rep(i, n) cc_s.add((x[i] + (m - h[i])) + y[i]); rep(i, n) cc_t.add((x[i] - (m - h[i])) - y[i]); rep(i, n) cc_t.add((x[i] + (m - h[i])) - y[i]); int ks = cc_s.size(); int kt = cc_t.size(); vector>> event(kt); rep(i, n){ event[cc_t((x[i] - (m - h[i])) - y[i])].emplace_back(+1, cc_s(x[i] - (m - h[i]) + y[i]), cc_s(x[i] + (m - h[i]) + y[i])); event[cc_t((x[i] + (m - h[i])) - y[i])].emplace_back(-1, cc_s(x[i] - (m - h[i]) + y[i]), cc_s(x[i] + (m - h[i]) + y[i])); } /* cout << cc_s.xs; cout << cc_t.xs; */ vi memo(ks); vector ans(n + 1); rep(t, kt){ auto& v = event[t]; if(t > 0){ rep(s, ks - 1){ ans[memo[s]] += (cc_t[t] - cc_t[t - 1]) * (cc_s[s + 1] - cc_s[s]); } } // cout << v.size() << "\n"; for(auto [parity, from, to] : v){ for(int s = from; s < to; s++){ memo[s] += parity; } } /* cout << memo; cout << ans; cout << "\n"; */ } for(int i = 1; i <= n; i++){ cout << ans[i] / 2<< "\n"; } return 0; }