样例都过不了
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
const int M = 2e5 + 10;
inline int rd() {
int x = 0, f = 1; char ch = getchar();
while (ch < '0' || ch > '9') {if (ch == '-') f = -1; ch = getchar();}
while (ch >= '0' && ch <= '9') {x = x * 10 + ch - '0'; ch = getchar();}
return x * f;
}
int n, k;
struct node {
int a, b, c, id;
} p[N], tmp[N];
int C[M], cnt[N], ans[N];
bool cmp(const node &x, const node &y) {
return x.a < y.a;
}
int lowbit(int x) {
return x & (-x);
}
void update(int x, int v) {
for (int i = x; i <= k; i += lowbit(i)) {
C[i] += v;
}
}
int query(int x) {
int res = 0;
for (int i = x; i > 0; i -= lowbit(i)) {
res += C[i];
}
return res;
}
void solve(int l, int r) {
if (l >= r) return;
int mid = (l + r) >> 1, i = l, j = mid + 1, tot = l;
solve(l, mid); solve(mid + 1, r);
while (i <= mid || j <= r) {
if (i <= mid && (j > r || p[i].b <= p[j].b)) {
tmp[tot++] = p[i];
update(p[i++].c, 1);
}
else {
tmp[tot++] = p[j];
cnt[p[j].id] += query(p[j++].c - 1);
}
}
for (i = l; i <= mid; i++) update(p[i].c, -1);
for (i = l; i <= r; i++) p[i] = tmp[i];
}
int main() {
n = rd(); k = rd();
for (int i = 1; i <= n; i++) p[i] = {rd(), rd(), rd(), i};
sort(p + 1, p + n + 1, cmp);
solve(1, n);
for (int i = 1; i <= n; i++) ans[cnt[i]]++;
for (int i = 0; i < n; i++) cout << ans[i] << endl;
cout << endl;
return 0;
}