先按y排序,二分,两边递归下去,然后处理下半部分对上半部分的贡献,即左下点在下半部分,右上点在上半部分的合法矩形个数. 两个部分均按x排序,枚举右上点p,则左下点需要满足: 1.横坐标大于上半部分纵坐标比p小的点的最大横坐标k. 2.不存在下半部分点满足纵坐标在两点之间,横坐标也在两点之间. 这样,我们对上半部分维护一个纵坐标单减的单调栈,下半部分维护纵坐标单增的单调栈. 每次枚举p时,将下半部分所有横坐标小于p的点加入栈中,再在栈中二分k即可. #include<cstdio> #inclu…