dp-线段树进阶-几何转dp-点集划分

https://ac.nowcoder.com/acm/contest/881/I

大意:给n(1e5)个点给定每个点的x坐标,y坐标,a属性,b属性,求:让你将所有点划分到2个点集A,B(其中一个可以为空)

,划分要求为:不存在点C∈A,点D∈B,xC>=xD&&yC<=yD,划分的权值为A内所有点的a属性和B内所有点的b属性之和

分析:

这他喵?????怎么写??
一看,完全没有任何思路

直到看到题解:用一条非递减的折线穿过点集,折线下的全部划为B,折线上的点全部划为A,这样的划分肯定是合法的(

猜一猜,好像是这样没错).

 

然后下面就是一个非常重要的思想了:将点按X坐标分层:X坐标相同的点分作一层,这样二维平面中的点就变成了矩阵中的点

只不过有些地方有点,有些地方没点

对于矩阵中的任意一个点(x0,y0)(这个地方可能没点),折线在x0这一层可以得到的ans= (x<x0的点所能做得最大贡献)+(x=x0,y>y0的点的所有的a

属性和)+(x=x0,y<=y0)的所有点的b属性和

这是想某一个点能从哪些地方获得贡献的

接下来想点能够对哪些地方构成贡献

设矩阵中有一个点(x0,y0)(这个地方有点),那么这个点毫无疑问能对同层y>=y0的地方造成B的贡献,对y<y0的地方造成A的贡献

 

区间加值????对!就是用线段树

这题更新的时候线段树用的非常巧妙

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值