每张海报的坐标范围0<=li<=ri<=107,线段树维护107长度的序列会爆内存。但是海报的数量1<=n<=10000,也就是线段树需要更新的区间端点数<=20000个,因此对坐标进行离散化处理。
这篇博客中指出普通的离散化在这个题中有些问题,考虑下面这组数据
1 | 1 10 |
离散化坐标映射后,1->0,4->1,6->2,10->3,更新完后,区间[0,1],[2,3]被后面两张海报覆盖,可见的海报数为2。而第一张海报在原始区间[5,5]仍然可见,答案应为3.
因此,如果排序后相邻两坐标xi,xi+1的差>1,则需要在两者之间插入一个数,使得离散后xi,xi+1的差也>1。区间(xi,xi+1)中可见的海报数为0或1,仅需要插入一个数,其信息在最终就能够被统计到。
1 |
|