球吊20pts,马蜂优良
查看原帖
球吊20pts,马蜂优良
701387
xiaoliebao1115楼主2024/7/22 18:36
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int nn=1e5+5,db=1e5;
int n,m,cnt;
struct node{
	int x,y,id,ans,ny,p;
	bool type;
};
node t[nn*5];
bool cmp(node l1,node l2){
	if(l1.x==l2.x) return l1.y<l2.y;
	return l1.x<l2.x;
}
bool cmp2(node l1,node l2){
	return l1.id<l2.id;
}
bool cmp3(node l1,node l2){
	return l1.y<l2.y;
}
int tree[nn];
void add(int x,int p){
	for(int i=x;i<=db;i+=i&(-i))tree[i]+=p;
}
int query(int x){
	int ans=0;
	for(int i=x;i>=1;i-=i&(-i)) ans+=tree[i];
	return ans;
}
signed main()
{
	std::ios::sync_with_stdio(false),std::cin.tie(nullptr);
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		int x,y,p;
		cin>>x>>y>>p;
		cnt++,t[cnt].x=x,t[cnt].y=y,t[cnt].id=cnt,t[cnt].type=0,t[cnt].p=p;
	}
	for(int i=1;i<=m;i++){
		int x1,y1,x2,y2;
		cin>>x1>>y1>>x2>>y2;
		cnt++,t[cnt].x=x2,t[cnt].y=y2,t[cnt].id=cnt,t[cnt].type=1;
		cnt++,t[cnt].x=x1-1,t[cnt].y=y2,t[cnt].id=cnt,t[cnt].type=1;
		cnt++,t[cnt].x=x2,t[cnt].y=y1-1,t[cnt].id=cnt,t[cnt].type=1;
		cnt++,t[cnt].x=x1-1,t[cnt].y=y1-1,t[cnt].id=cnt,t[cnt].type=1;
	}
	sort(t+1,t+cnt+1,cmp3);
	t[1].ny=1;
	for(int i=2;i<=cnt;i++){
		if(t[i].y==t[i-1].y) t[i].ny=t[i-1].ny;
		else t[i].ny=t[i-1].ny+1;
	}
	sort(t+1,t+cnt+1,cmp);
	for(int i=1;i<=cnt;i++){
		if(t[i].type==0) add(t[i].ny,t[i].p);
		else t[i].ans=query(t[i].ny);
	}
	sort(t+1,t+cnt+1,cmp2);
	for(int i=1;i<=m;i++){
		int ans=t[n+(i-1)*4+1].ans-t[n+(i-1)*4+2].ans-t[n+(i-1)*4+3].ans+t[n+i*4].ans;
		cout<<ans<<endl;
	}
	return 0;
}

诡异20pts

2024/7/22 18:36
加载中...