听说Re是最好调的?
查看原帖
听说Re是最好调的?
184271
l55584楼主2022/8/29 00:25

交了两页了……

Re了2 9 10

dalao没做过也没关系……估计是哪里有sb错误,代码里可能直接能看出来

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string.h>
#include <vector>
#define rep(a,b,c) for(register int a=b;a<=c;++a)
#define ls l,mid,t<<1
#define rs mid+1,r,t<<1|1
using namespace std;
typedef long long ll;
const int N=3e4+4;
ll w,h,n;
struct node {
	ll x,y1,y2;
	ll b;
};
node a[N<<1];
bool cmp(node x,node y) {
	return x.x<y.x;
}
int tot;
ll tree[N<<2],lz[N<<2];
void add(int L,int R,ll val,int l=0,int r=tot,int t=1) {//这里我试过该r成n*2,除了#1全MLE了 
	if(L>R) return;
	if(l>=L&&r<=R) {
		lz[t]+=val;
		tree[t]+=val;
		return;
	}
	int mid=(l+r)>>1;
	if(L<=mid) add(L,R,val,ls);
	if(R>mid) add(L,R,val,rs);
	tree[t]=max(tree[t<<1],tree[t<<1|1])+lz[t];
}
vector<ll> dic;
void solve() {
	memset(tree,0,sizeof tree);
	memset(lz,0,sizeof lz);
	cin>>n>>w>>h;
	rep(i,1,n) {
		cin>>a[i].x>>a[i].y1>>a[i].b;
		a[i].y2=a[i].y1+h;
		a[i].y1++;
		a[i].y2--;
		a[n+i]=a[i];
		a[n+i].x=a[i].x+w+1;
		a[n+i].b*=-1;
		a[i].x++;
		dic.push_back(a[i].y1);dic.push_back(a[i].y2);
	}
	sort(a+1,a+1+n*2,cmp);
	sort(dic.begin(),dic.end());
	tot=unique(dic.begin(),dic.end())-dic.begin();
	rep(i,1,2*n)
	{
		a[i].y1=lower_bound(dic.begin(),dic.begin()+tot,a[i].y1)-dic.begin();
		a[i].y2=lower_bound(dic.begin(),dic.begin()+tot,a[i].y2)-dic.begin();
	}
	ll ans=0;
	rep(i,1,n*2) {
	//	cout<<a[i].y1<<" "<<a[i].y2<<endl;
		add(a[i].y1,a[i].y2,a[i].b);
		if(i<n*2&&a[i+1].x==a[i].x) continue;
		ans=max(ans,tree[1]);
	}
	cout<<ans<<endl;
}
int main() {
//	freopen("in.in","r",stdin);
	int t;cin>>t;
	while(t--) solve();
	return 0;
}
2022/8/29 00:25
加载中...