不妨我们先拿总区间[1,5]来说,对这个总区间建立一棵线段树,维护数据区间[l,r]之间数字个数,这里l,r应该取序列a的最小值1和最大值8。若题目给的数太大,一般要进行离散化,下文再提。 画出这棵线段树: 红色数字代表出现在数据区间[l,r]内的数字个数。 现在有了这棵线段树,我就能询问总区间【1,5】内的...
我们将线段树套在树状数组上,查询前预处理出所有要一起移动的节点编号,并在查询过程中一起将这些节点移到左右子树上。 Code: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
洛谷P2617 Dynamic Rankings 主席树 单点修改 区间查询第 K 大,我们将线段树套在树状数组上,查询前预处理出所有要一起移动的节点编号,并在查询过程中一起将这些节点移到左右子树上。Code: