bzoj2391Cirno的忧郁 treap+三角剖分

来源:互联网 发布:三维人像建模软件 编辑:程序博客网 时间:2024/05/15 23:44

好强啊这题,只能%题解。
因为题目中不存在三点共线的情况

先设p0(-10000,-10000),然后将其他点极角排序(如果用最左下的点后面计算时还需要特殊处理)

f[i][j]表示0,i,j这个三角形内的点数,ij为排序后的标号

这一步可以预处理,做法是对于每个i建一棵平衡树,将排在它以后的j逐个加入平衡树,平衡树的关键字为i为基点的极角,可以发现j在平衡树中的排名就是三角形内部的点数+1

然后将三角形内部的点数当做其面积,用叉乘求多边形面积的方法计算内部总点数,再将边上额外计算的点减掉,可以发现,没有减去的点数等于顺时针的边数-1

总复杂度O(n^2logn + m*s)
代码的话剪贴板好像挂了,等好了再传上来。