【JZOJ3976】Cirno的忧郁

Description

Cirno闲着无事的时候喜欢冰冻青蛙。
Cirno每次从雾之湖中固定的n个结点中选出一些点构成一个简单多边形,Cirno运用自己的能力能将此多边形内所有青蛙冰冻。
雾之湖生活着m只青蛙,青蛙有大有小,所以每只青蛙的价值为一个不大于10000的正整数。
Cirno很想知道每次冻住的青蛙的价值总和。因为智商有限,Cirno将这个问题交给完美算术教室里的你。
因为爱护动物,所以每次冻结的青蛙会被放生。也就是说一只青蛙可以被多次统计。

Solution

通常做法是建一个最左下角的点,然后预处理出以这个点和另外两个点构成三角形所围成的点权和,这个用极角排序然后平衡树维护一下向量,最后统计的时候三角剖分。

有一个很妙的做法,就是维护有向线段正下方的点权和,即一条线段(默认x轴正半轴方向为正方向)两端点为 (x1,y1) (x2,y2) ,所有在右半平面上的点 (x,y) 满足 x[x1,x2) 的权值和,维护也很简单,每次选定一个点为原点,然后极角序加入点,树状数组上维护一下即可。

posted @ 2018-01-05 21:54  sadstone  阅读(50)  评论(0编辑  收藏  举报