题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3110
题目大意:有N个位置,M个操作。操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c
如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数是多少。
做法:看到这题,第一想法,树状数组套可持久化线段树,但是这题是区间修改,暴力修改的话感觉上会GG,所以换一种思维,即树套树实现,这题应该是线段树套线段树,一般的线段树套线段树都是外层维护序列中的位置,内层维护权值,但是对于这题来说不好在树中类似BST来二分答案。换一种思维嘛,外层线段树维护权值,内层线段树维护位置,就很好做了,对于修改操作,外层线段树会经过logn个节点,再在内层线段树中使用lazy—tag,每次修改操作时间复杂度,log^2n,动态开点,空间复杂度也为mlog^2n,对于询问操作,在外层线段树上二分即可。
树套树。