线段树模板
1、求区间和 1 #include <cstdio> 2 #include <iostream> 3 using namespace std; 4 const int maxn=50000+5; 5 int a[maxn]; 6 struct Node 7 { 8 int l,r,sum; 9 } node[maxn<<2]; 10 11 //参数含义:节点区间,节点编号 12 void InitTree(int l,int r,int k) 13 { 14 node[k].r=r;//节点k的右子树 15 node[k].l=l; 16 node[k].sum=0;//权值 17 if(l==r)//到达叶子节点 18 { 19 node[k].sum=a[r]; 20 return; 21 } 22 int mid=(l+r)>>1; 23 InitTree(l,mid,k<<1);//递归建左子树 24 InitTree(mid+1,r,k<<1|1);//递归建右子树 25 26 node[k].sum=node[k<<1].sum+node[k<<1|1].sum; 27 //父节点的值为两子节点值的和 28 //此为线段树的核心所在,求最值修改这一句即可 29 } 30 void UpdateTree(int l,int r,int k,int sum) 31 { 32