第9个点RE,求助
查看原帖
第9个点RE,求助
755096
2023wangzhaolan楼主2023/10/14 13:20
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=2e5+10;
int n,k;
struct node{
	int x,y,z;
}a[N];
struct node2{
	int p,x,id;
}b[N];
int c[N],f[N],d[N];
bool cmp(node a,node b){
	return (a.x==b.x)?((a.y==b.y)?(a.z<=b.z):(a.y<b.y)):(a.x<b.x);
}
bool cmp2(node2 a,node2 b){
	return (a.p==b.p)?(a.id<=b.id):(a.p<b.p);
}
int lowbit(int x){
	return x&(-x);
}
void add(int x,int d){
	for(int i=x;i<=k;i+=lowbit(i))c[i]+=d;
}
int query(int x){
	int ret=0;for(int i=x;i;i-=lowbit(i))ret+=c[i];return ret;
}
void CDQ(int l,int r){
	if(l>=r)return ;
	int mid=l+r>>1,cnt=0;
	for(int i=l;i<=r;i++){
		b[++cnt].p=a[i].y;b[cnt].id=i;b[cnt].x=a[i].z;
	}
	sort(b+1,b+cnt+1,cmp2);
	for(int i=1;i<=cnt;i++){
	
		if(b[i].id<=mid)add(b[i].x,1);
		else{
			int t=query(b[i].x);
			f[b[i].id]+=t;
		
		}
	}
	for(int i=1;i<=cnt;i++){
		if(b[i].id<=mid)add(b[i].x,-1);
	}
	int num=0;
	for(int i=mid+1;i<=r;i++){if(a[i].x==a[mid].x&&a[i].y==a[mid].y&&a[i].z==a[mid].z)num++;else break;}
	for(int i=mid;i>=l;i--){
		if(a[i].x==a[mid].x&&a[i].y==a[mid].y&&a[i].z==a[mid].z)f[i]+=num;else break;
	}
	CDQ(l,mid);CDQ(mid+1,r);
}
signed main(){
	cin>>n>>k;
	for(int i=1;i<=n;i++)scanf("%lld%lld%lld",&a[i].x,&a[i].y,&a[i].z);
	sort(a+1,a+n+1,cmp);
	CDQ(1,n);
	for(int i=1;i<=n;i++)d[f[i]]++;
	for(int i=0;i<n;i++)cout<<d[i]<<"\n";
	return 0;
}
2023/10/14 13:20
加载中...