社区讨论

听说Re是最好调的?

P1502窗口的星星参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@lo85tpq4
此快照首次捕获于
2023/10/27 13:15
2 年前
此快照最后确认于
2023/10/27 13:15
2 年前
查看原帖
交了两页了……
Re了2 9 10
dalao没做过也没关系……估计是哪里有sb错误,代码里可能直接能看出来
CPP
#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;
}

回复

2 条回复,欢迎继续交流。

正在加载回复...