题目链接:https://www.luogu.org/problem/P1502

扫描线的板子题,把每个点看成矩形,存下边(x,y,y+h-1,li)和(x+w-1,y,y+h-1),在按横坐标扫线段更新y区间,线段树维护区间最大值

#include<iostream>
#include<algorithm>
using namespace std;
#define ll long long
#define ls l,mid,rt<<1
#define rs mid+1,r,rt<<1|1
#define maxn 20005
struct seg{
ll x,l,r,s,val;
seg(){}
seg(ll x,ll l,ll r,ll s,ll val):x(x),l(l),r(r),s(s),val(val){};
bool operator <(const seg &w)const{
if(x==w.x)return s>w.s;
return x<w.x;
}
}se[maxn<<];
struct node{
ll x,y,val,x1,y1;
}a[maxn<<];
ll n,w,h,ly[maxn<<],ny;
ll sum[maxn<<],lazy[maxn<<];
void pushup(int rt)
{
sum[rt]=max(sum[rt<<],sum[rt<<|]);
}
void build(int l,int r,int rt)
{
sum[rt]=lazy[rt]=;
if(l==r)
{
return ;
}
int mid=l+r>>;
build(ls);build(rs);
pushup(rt);
}
void pushdown(int rt)
{
if(lazy[rt])
{
sum[rt<<]+=lazy[rt];
sum[rt<<|]+=lazy[rt];
lazy[rt<<]+=lazy[rt];
lazy[rt<<|]+=lazy[rt];
lazy[rt]=;
}
}
void update(int L,int R,int val,int l,int r,int rt)
{
if(L<=l&&R>=r)
{
sum[rt]+=val;
lazy[rt]+=val;
return ;
}
pushdown(rt);
int mid=l+r>>;
if(L<=mid)update(L,R,val,ls);
if(R>mid)update(L,R,val,rs);
pushup(rt);
}
int main()
{
int t;
cin>>t;
while(t--)
{
cin>>n>>w>>h;
int cnt=;
for(int i=;i<=n;i++)
{
cin>>a[i].x>>a[i].y>>a[i].val;
a[i].y1=a[i].y+h-;
ly[++cnt]=a[i].y;ly[++cnt]=a[i].y+h-;
se[cnt-]=seg(a[i].x,a[i].y,a[i].y1,,a[i].val);
se[cnt]=seg(a[i].x+w-,a[i].y,a[i].y1,-,a[i].val);
}
sort(ly+,ly++cnt);
sort(se+,se++cnt);
ny=unique(ly+,ly++cnt)-ly-;
build(,ny,);
int l,r;
ll ans=;
for(int i=;i<=cnt;i++)
{
l=lower_bound(ly+,ly++ny,se[i].l)-ly;
r=lower_bound(ly+,ly++ny,se[i].r)-ly;
if(se[i].s==)update(l,r,se[i].val,,ny,);
else update(l,r,-se[i].val,,ny,);
ans=max(ans,sum[]);
}
cout<<ans<<endl;
}
return ;
}

最新文章

  1. docker使用中国镜像
  2. Swift中的富文本注释格式
  3. 互联网 IT 精英:龙泉寺静心之旅
  4. springMVC+freemarker中Could not resolve view with name... 问题解决
  5. [Ext JS 4] 实战之Grid, Tree Gird编辑Cell
  6. JSON, list, 前台显示
  7. Xampp配置本地域名及常见错误解决
  8. bzoj2007 NOI2010 网络流转对偶图
  9. java面试总结
  10. mysql老是停止运行该怎么解决
  11. [笔记] SQL性能优化 - 避免使用 IN 和 NOT IN
  12. 用Quartz 2D画小黄人
  13. python 全栈开发,Day118(django事务,闭包,客户管理,教学管理,权限应用)
  14. Linux虚拟机安装VMware Tools
  15. ios开发之--所有设备的屏幕尺寸
  16. Fiddler抓包原来可以这么玩
  17. Java基础第一节.Java简介
  18. google kaptcha 验证码组件使用简介
  19. WIN10把照片查看器设为默认看图软件
  20. __new__.py

热门文章

  1. CF351E Jeff and Permutation
  2. python基础八之文件操作
  3. P1070 东风谷早苗
  4. 【t068】智慧碑
  5. 关于git命令
  6. CSS3侧栏滑出简单实现
  7. Linux 内核 /sys/class类
  8. codeforces 600E E. Lomsat gelral (线段树合并)
  9. asp.net core 3.x Endpoint终结点路由1-基本介绍和使用
  10. JavaScript数组的方法 | 学习笔记分享