社区讨论
听说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 条回复,欢迎继续交流。
正在加载回复...