题目:zoj2112
题意:求区间第k大的数,有修改操作。
分析:这题可以树套树搞。
我看的是树状数组套线段树版的。还有线段树套平衡树版的。
首先用一棵主席树(见这篇文章)维护没有操作前的数据。
然后用树状数组维护修改。
树状数组的每一个节点是一棵线段树,而且树状数组的每个节点都有一个管辖域(树状数组的性质没变)。
每更新一次,会修改log(n)个树状数组的节点。然而修改是不可取的,所以采用了新建了log(n)棵线段树的方法。
每新建一棵线段树,就是把原来版本的线段树先拷贝过来,然后新增一条路径(增加log(n)个节点)来代替那条要修改的路径。
代码(树状数组套线段树):
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef unsigned long long UL