救救孩子! WA10pts!
查看原帖
救救孩子! WA10pts!
651786
yyc_楼主2023/2/18 21:47
#include<bits/stdc++.h>
#define mids(l,r) const auto mid = l + r >> 1
#define cint const int&
using namespace std;
const int maxn = 5e5+10;
int n,m,k;
struct data {
	int a,b,c;
	int cnt,ans;
	bool ta;
}p[maxn],tmp[maxn];
using cdt = const data&;
inline bool cmpc(cdt u,cdt v) {return u.c < v.c;}
inline bool cmpb(cdt u,cdt v) {return u.b == v.b ? cmpc(u,v) : u.b < v.b;}
inline bool cmpa(cdt u,cdt v) {return u.a == v.a ? cmpb(u,v) : u.a < v.a;}
void cdqb(cint l,cint r) {
	if(l == r) return;
	mids(l,r);
	cdqb(l,mid),cdqb(mid+1,r);
	sort(p+l,p+mid+1,cmpc),
	sort(p+mid+1,p+r+1,cmpc);
	int i = l,j= mid+1,tc =0 ;
	for(;j<=r;++j){
		while(i <= mid && p[i].c <= p[j].c) {
			if(p[i].ta == 0) tc += p[i].cnt;
			++i;
		}
		if(p[j].ta) p[j].ans += tc;
	}
}
inline void outs(cint l,cint r) {
	cout<<"l: "<<l<<",r: "<<r<<'\n';
	for(int i = l;i<=r;++i) cout<<"{"<<p[i].a<<','<<p[i].b<<','<<p[i].c<<"},";
	cout<<'\n';
}
void cdqa(cint l,cint r) {
//	outs(l,r);
	if(l == r) return;
	mids(l,r);
	cdqa(l,mid),cdqa(mid+1,r);
	for(int i = l;i<=mid;++i) p[i].ta = 0;
	for(int i = mid+1;i<=r;++i) p[i].ta = 1;
	sort(p+l,p+r+1,cmpb); 
	cdqb(l,r);
	sort(p+l,p+r+1,cmpa);
}
int ans[maxn];
signed main() {
	ios::sync_with_stdio(0),cin.tie(0);
	cin>>n>>k;
	for(int i = 1;i<=n;++i) cin>>p[i].a>>p[i].b>>p[i].c;
	sort(p+1,p+n+1,cmpa);
	for(int tc = 0,i = 1;i<=n;++i){
		++tc;
		if(p[i].a != p[i+1].a || p[i].b != p[i+1].b || p[i].c != p[i+1].c) {
			p[++m] = p[i];
			swap(p[m].cnt,tc);
		}
	}
	cdqa(1,m);
	for(int i = 1;i<=m;++i)
		ans[p[i].ans + p[i].cnt - 1] += p[i].cnt;
	for(int i = 0;i<n;++i) cout<<ans[i]<<'\n';
}
2023/2/18 21:47
加载中...