Description
Cirno闲着无事的时候喜欢冰冻青蛙。
Cirno每次从雾之湖中固定的n个结点中选出一些点构成一个简单多边形,Cirno运用自己的能力能将此多边形内所有青蛙冰冻。
雾之湖生活着m只青蛙,青蛙有大有小,所以每只青蛙的价值为一个不大于10000的正整数。
Cirno很想知道每次冻住的青蛙的价值总和。因为智商有限,Cirno将这个问题交给完美算术教室里的你。
因为爱护动物,所以每次冻结的青蛙会被放生。也就是说一只青蛙可以被多次统计。
Solution
通常做法是建一个最左下角的点,然后预处理出以这个点和另外两个点构成三角形所围成的点权和,这个用极角排序然后平衡树维护一下向量,最后统计的时候三角剖分。
有一个很妙的做法,就是维护有向线段正下方的点权和,即一条线段(默认x轴正半轴方向为正方向)两端点为(x1,y1),(x2,y2),所有在右半平面上的点(x,y)满足x∈[x1,x2)的权值和,维护也很简单,每次选定一个点为原点,然后极角序加入点,树状数组上维护一下即可。

Cirno喜欢冰冻雾之湖中的青蛙,并希望计算每次冰冻青蛙的总价值。通过一种巧妙的方法,利用极角排序和树状数组维护有向线段正下方的点权和来解决这一问题。
533

被折叠的 条评论
为什么被折叠?



