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的贡献

 

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

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

全部评论

相关推荐

孤寡孤寡的牛牛很热情:为什么我2本9硕投了很多,都是简历或者挂,难道那个恶心人的测评真的得认真做吗
点赞 评论 收藏
分享
想去夏威夷的小哥哥在度假:5和6才是重点
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务