题目描述
题解
感觉这道题蕴含了一些十分巧妙的性质。
可以发现好点对实际上很少,最多不超过2n个。当一个点作为点对中的较小点的时候,最多只能和它左边第一个大于等于它的点以及它右边第一个大于等于它的点配对。
维护一个单调递减的栈就可以求出所有的好点对。
还可以发现对于一段询问的区间,找出区间中最大的点的位置,那么区间中的所有好点对都不会跨越这个点。那么就计算左端点在最大点左边的个数,右端点在最大点右边的个数就可以了。时间复杂度 O(nlogn) ,用 O(
感觉这道题蕴含了一些十分巧妙的性质。
可以发现好点对实际上很少,最多不超过2n个。当一个点作为点对中的较小点的时候,最多只能和它左边第一个大于等于它的点以及它右边第一个大于等于它的点配对。
维护一个单调递减的栈就可以求出所有的好点对。
还可以发现对于一段询问的区间,找出区间中最大的点的位置,那么区间中的所有好点对都不会跨越这个点。那么就计算左端点在最大点左边的个数,右端点在最大点右边的个数就可以了。时间复杂度 O(nlogn) ,用 O(