Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void build_tree(int m[],int v,int tl,int tr) {
- if (tl==tr) tree[v]=make_pair(m[tl],tl);
- else {
- int tm=(tl+tr)/2;
- build_tree(m,2*v,tl,tm);
- build_tree(m,2*v+1,tm+1,tr);
- if (tree[2*v].first>tree[2*v+1].first)
- tree[v]=make_pair(tree[2*v].first,tree[2*v].second);
- else tree[v]=make_pair(tree[2*v+1].first,tree[2*v+1].second);
- }
- }
- int sum(int v,int tl,int tr,int l,int r) {
- if (l>r) return 0;
- if (l==tl && r==tr) return tree[v];
- int tm=(tl+tr)/2;
- return sum(2*v,tl,tm,l,min(r,tm))+sum(2*v+1,tm+1,tr,max(l,tm+1),r);
- }
- void update (int v, int tl, int tr, int pos, int new_val) {
- if (tl == tr)
- t[v] = new_val;
- else {
- int tm = (tl + tr) / 2;
- if (pos <= tm)
- update (v*2, tl, tm, pos, new_val);
- else
- update (v*2+1, tm+1, tr, pos, new_val);
- t[v] = t[v*2] + t[v*2+1];
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement