只对了第1个点,跪求大佬
#include<cstdio>
#include<algorithm>
using namespace std;
int n,k;
struct sd{
int a;
int b;
int c;
int cnt;
}d[100005],e[100005];
bool cmp_a(sd A,sd B){
if(A.a!=B.a) return A.a<B.a;
if(A.b!=B.b) return A.b<B.b;
return A.c<B.c;
}
bool cmp_b(sd A,sd B){
if(A.b!=B.b) return A.b<B.b;
return A.c<B.c;
}
int num[100005],ans[100005];
int lowbit(int x){return x&(-x);}
int f[200005];
void add(int x,int y){
for(;x<=k;x+=lowbit(x)) f[x]+=y;
}
int findth(int x){
int sum=0;
for(;x;x-=lowbit(x)) sum+=f[x];
return sum;
}
void CDQ(int s,int t){
if(s==t) return ;
if(t-s==1){
if(d[t].b>=d[s].b&&d[t].c>=d[s].c) num[t]+=d[s].cnt;
return ;
}
int mid=(s+t)>>1;
CDQ(s,mid);
CDQ(mid+1,t);
sort(d+s,d+mid+1,cmp_b);
sort(d+mid+1,d+t+1,cmp_b);
int i=s,j=mid+1;
while(j<=t){
while(d[i].b<=d[j].b&&i<=mid) add(d[i].c,d[i].cnt),i++;
num[j]+=findth(d[j].c);
j++;
}
i--;
for(;i>=s;i--) add(d[i].c,-d[i].cnt);
}
int main(){
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++) scanf("%d%d%d",&e[i].a,&e[i].b,&e[i].c);
sort(e+1,e+n+1,cmp_a);
int tot=0,cnt_tot=0;
for(int i=1;i<=n;i++){
cnt_tot++;
if(e[i].a!=e[i+1].a||e[i].b!=e[i+1].b||e[i].c!=e[i+1].c){
tot++;
d[tot].a=e[i].a;
d[tot].b=e[i].b;
d[tot].c=e[i].c;
d[tot].cnt=cnt_tot;
cnt_tot=0;
}
}
int N=n;
n=tot;
CDQ(1,n);
for(int i=1;i<=n;i++) num[i]=num[i]+d[i].cnt-1;
for(int i=1;i<=n;i++) for(int j=1;j<=d[i].cnt;j++) ans[num[i]]++;
for(int i=0;i<N;i++) printf("%d\n",ans[i]);
}