#include<bits/stdc++.h>
using namespace std;
inline void read(int&x){
x=0;bool f=1;char ch=getchar();
while(ch<48||ch>57){f=!(ch==45);ch=getchar();}
while(ch>=48&&ch<=57){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
x=f?x:-x;
}
int n,k,tr[200001],q[100001];
struct node{
int num,a,b,c,w,ans;
};
node f[100001];int cnt;
inline void add(int x,int k){
while(x<=n){
tr[x]+=k;
x+=x&-x;
}
}
inline int query(int x){
int ans=0;
while(x){
ans+=tr[x];
x-=x&-x;
}
return ans;
}
bool cmp1(node x,node y){return x.a<y.a||x.a==y.a&&x.b<y.b||x.a==y.a&&x.b==y.b&&x.c<y.c;}
bool cmp2(node x,node y){return x.b<y.b;}
void solve(int L,int R){
if(L==R)return;
int mid=(L+R)/2,i,p;
solve(L,mid);
solve(mid+1,R);
sort(f+L,f+mid+1,cmp2);
sort(f+mid+1,f+R+1,cmp2);
for(p=L,i=mid+1;i<=R;++i){
while(p<=mid&&f[p].b<=f[i].b){
add(f[p].c,f[p].w);++p;
}
f[i].ans+=query(f[i].c);
}
for(i=L;i<p;++i){
add(f[i].c,-f[i].w);
}
}
signed main(void){
read(n);read(k);int i;
for(i=1;i<=n;++i){
read(f[i].a);read(f[i].b);read(f[i].c);
f[i].num=i;
}
sort(f+1,f+n+1,cmp1);f[1].w=1;
for(i=2,cnt=1;i<=n;++i){
if(f[i].a==f[i-1].a&&f[i].b==f[i-1].b&&f[i].c==f[i-1].c){
++f[cnt].w;
}else{
f[++cnt]=f[i];
f[cnt].w=1;
}
}
solve(1,cnt);
for(i=1;i<=cnt;++i){
q[f[i].ans+f[i].w-1]+=f[i].w;
}
for(i=0;i<n;++i)
printf("%d\n",q[i]);
return 0;
}
Sub7和Sub10WA掉了。