突然想起一道以前没做出来的题
pandm 2011-07-07 11:50:05 给你一个区间[1...N], 还有若干个操作,定义一个全局变量id = 0(初始值)。
操作的种类是:
(1)I(a, b),插入线段[a,b],a和b是线段的端点,并且定义该线段的编号为id,然后id++
(2)D(n),删除id为n的线段
(3)Q(i,j) 询问有多少条线段覆盖区间[i, j]。如果一个线段的其中一个端点x满足 a < x < b,那么我们才认为该线段覆盖了区间[a, b],或者说该区间包含了该线段。
读入所有的操作,然后根据操作3来输出。
现在还是不会做。
但是有个想法,不知道可不可行。
先建立一棵线段树,对于每个节点,维护一个set,用来存放该结点所代表的区间里包含的所有线段的id集合。
如果要知道区间[i, j]包含的线段数,只要将区间分成若干个对应于线段树节点的小区间,将这些结点的set合并成一个大set,然后看看大set里的id个数就知道区间[i, j]包含的线段数了。
其实我就想知道这题的“标准做法”是什么。