线段树模板 (刘汝佳)
一、线段树( 点修改 ) Update(x,v): 把Ax修改为v Query(L,R): 计算区间[qL,qR] 最小值。 代码: [cpp] view plain copy // Dynamic RMQ // Rujia Liu // 输入格式: // n m 数组范围是a[1]~a[n],初始化为0。操作有m个 // 1 p v 表示设a[p]=v // 2 L R 查询a[L]~a[R]的min #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int INF = 1000000000; const int maxnode = 1<<17; int op, qL, qR, p, v; //qL和qR为全局变量,询问区间[qL,qR]; struct IntervalTree { int minv[maxnode]; void update( int o, int L, int R) { int M = L + (R-L)/2; if(L == R) minv[o] = v; // 叶结点,直接更新minv else { // 先递归更新左子树或右子树 if(p <= M) update(o*2, L, M); else update(o*2+1, M+1, R)