4237: 稻草人
分析:
CDQ分治+单调栈。
首先按照x排序,每次分治,考虑左边一个点和多少个右边的点可以有贡献。CDQ的过程中,按照y从大到小排序。
左右两边的y都是从大到小的,所以对于每个左边点,先把y比它大的加上,然后在这些点中维护一个x递增的栈(每个点在上一个点的右下方,如果一个点的x大于下一个点,那么这个点是没有用的,下一个点y小,x小,在其左下方,能遮住它)。
对于左边的点,维护一个x递减的栈。这个栈的意义是上一个点对栈顶的点有限制(上一个点的x大,y大,所以在其左上方)。
代码:
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include