# segment tree
```cpp=
#include<bits/stdc++.h>
#define spdup ios::sync_with_stdio(0),cin.tie(0)
#define ll long long
using namespace std;
vector<ll> a={1,3,5,7,9,11}; //origin value array
vector<ll> segTree(100,-1); //segment tree array
ll len=6; //array size
void build(ll tl,ll tr,ll node){ // tl = array left , tr = array right , node = segTree index
if(tl==tr){ //lastChild
segTree[node]=a[tl]; // set => array [tl] or [tr]
}
else{ //parentNode
ll mid=(tl+tr)/2; //binary
ll nodeL=(2 * node + 1); //leftNode = 2*n+1
ll nodeR=(2 * node + 2); //rightNode= 2*n+2
build(tl,mid,nodeL); //build left tree
build(mid+1,tr,nodeR); //build right tree
segTree[node]=segTree[nodeL]+segTree[nodeR]; //parent = leftChild + rightChild
}
}
void update(ll tl ,ll tr, ll node,ll index,ll val){ //update value
if(tl==tr){
a[index]=val;
segTree[node]=val;
}
else{
ll mid=(tl+tr)/2;
ll nodeL=(2 * node + 1);
ll nodeR=(2 * node + 2);
if(index > mid){
update(mid+1,tr,nodeR,index,val);
}
else{
update(tl,mid,nodeL,index,val);
}
segTree[node]=segTree[nodeL]+segTree[nodeR];
}
}
ll query(ll tl ,ll tr, ll node,ll L,ll R){ //sum range
cout<<tl<<'\n'<<tr<<'\n'<<'\n';
if(tl>R || tr<L){
return 0;
}
else if(tl==tr || (L <= tl && tr <= R)){
return segTree[node];
}
ll mid=(tl+tr)/2;
ll nodeL=(2 * node + 1);
ll nodeR=(2 * node + 2);
ll sumL=query(tl,mid,nodeL,L,R);
ll sumR=query(mid+1,tr,nodeR,L,R);
return sumL+sumR;
}
signed main(void){
spdup;
build(0,len-1,0); //build segmenttree
// for(ll x=0;x!=15;x++){
// cout<<x<<'='<<segTree[x]<<'\n';
// }
// cout<<'\n';
update(0,len-1,0,4,6); //update array[4]=6
// for(ll x=0;x!=15;x++){
// cout<<x<<'='<<segTree[x]<<'\n';
// }
// cout<<'\n';
cout<<query(0,len-1,0,2,5)<<'\n'; //query 2 ~ 5
}
```