Guest User

Untitled

a guest
Mar 23rd, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.74 KB | None | 0 0
  1. int segment_tree_size;
  2. vector<int> segment_tree;
  3.  
  4. void change(int point, int value){
  5. point += segment_tree_size - 1;
  6. segment_tree[point] = value;
  7. while(point){
  8. point = (point - 1) / 2;
  9. segment_tree[point] = segment_tree[point * 2 + 1] + segment_tree[point * 2 + 2];
  10. }
  11. }
  12.  
  13. int range_sum(int left, int right, int now, int point_left, int point_right){
  14. if(right <= point_left || point_right <= left){
  15. return 0;
  16. }else if(left <= point_left && point_right <= right){
  17. return segment_tree[now];
  18. }else{
  19. return range_sum(left, right, now * 2 + 1, point_left, (point_left + point_right) / 2) +
  20. range_sum(left, right, now * 2 + 2, (point_left + point_right) / 2, point_right);
  21. }
  22. }
Add Comment
Please, Sign In to add comment