#include<stdio.h>
#include<algorithm>
int f[100001],C[200001],n,cnt[100001];
struct{int a,b,c;}a[100001],b[100001];
int sum(int x){int ans=0;for(;x;x-=(x&-x))ans+=C[x];return ans;}
void ins(int x){for(;x<200001;x+=(x&-x))++C[x];}
void clear(int x){for(;x<200001;x+=(x&-x))C[x]=0;}
void cdq(int l,int r){
if(l==r)return;
int mid=l+r>>1;
cdq(l,mid);cdq(mid+1,r);
int i=l,j=mid+1,k=l;
for(;i<=mid&&j<=r;++k){
if(a[i].b<a[j].b)b[k]=a[i],ins(a[i++].c);
else f[j]+=sum(a[j].c),b[k]=a[j++];
}
for(;i<=mid;b[k++]=a[i++]);
for(;j<=r;b[k++]=a[j++])f[j]+=sum(a[j].c);
for(i=l;i<=mid;++i)clear(a[i].c);
for(i=l;i<=r;++i)a[i]=b[i];
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;++i)scanf("%d%d%d",&a[i].a,&a[i].b,&a[i].c);
std::sort(a+1,a+n+1,[](const auto&x,const auto&y){return x.a<y.a;});
cdq(1,n);
for(int i=1;i<=n;++i)++cnt[f[i]];
for(int i=0;i<n;++i)printf("%d\n",cnt[i]);
return 0;
}
样例它居然输出:
7
0
0
0
0
3
0
0
0
0