4237: 稻草人
Time Limit: 40 Sec
Memory Limit: 256 MB
Submit: 466
Solved: 194
[ Submit][ Status][ Discuss]
Description
JOI村有一片荒地,上面竖着N个稻草人,村民们每年多次在稻草人们的周围举行祭典。
有一次,JOI村的村长听到了稻草人们的启示,计划在荒地中开垦一片田地。和启示中的一样,田地需要满足以下条件:
田地的形状是边平行于坐标轴的长方形;
左下角和右上角各有一个稻草人;
田地的内部(不包括边界)没有稻草人。
给出每个稻草人的坐标,请你求出有多少遵从启示的田地的个数
Input
第一行一个正整数N,代表稻草人的个数
接下来N行,第i行(1<=i<=N)包含2个由空格分隔的整数Xi和Yi,表示第i个稻草人的坐标
Output
Sample Input
4
0 0
2 2
3 4
4 3
Sample Output
3
HINT
所有满足要求的田地由下图所示:
1<=N<=2*10^5
0<=Xi<=10^9(1<=i<=N)
0<=Yi<=10^9(1<=i<=N)
Xi(1<=i<=N)互不相同。
Yi(1<=i<=N)互不相同。
Source
JOI 2013~2014 春季training合宿 竞技3 By PoPoQQQ
[ Submit][ Status][ Discuss]
此题展现了分治策略,,,感觉想不出来啊
对于所有点先按x坐标从小到大排好
对于[L,R]的区间,矩形无非分为端点都在[L,mid]端点都在[mid+1,R]端点跨过中间
于是我们只需要处理端点跨过中间的,剩下的递归处理即可
在左半部分枚举左下角,暂时不考虑右上角具体取谁,而是考虑右上角能取的范围
事实上,找到当前点右上方中与当前点y坐标差值最小,记为(x',y'),右上角能取的纵坐标区间就为[y,y']
对于每个右上角,能取的左下角类似
对于左边的点按照y坐标降序重新排列
会限制当前点的那个点显然是在新序列中当前点位置左边,第一个x坐标大于当前点的点
维护一个单调栈O(n)统计
右上角类似
那么现在每个点都处理出一个可行区间,,
对于每个选作右上角的点,左下角的选取首先满足在当前可行区间内,
然后那个左下角的可行区间要包含当前点
统计的话用树状数组累加就行。。。
#include
#include
#include
#include
#include
#include
#include
#include