Segment Tree(线段树)
来源:互联网 发布:如何购买备案好的域名 编辑:程序博客网 时间:2024/05/29 17:38
线段树代码模板:
public class NumArray {Node root;int[] nums; public NumArray(int[] nums) { this.nums=nums; if(nums.length>0){ root=build(root,0,nums.length-1); } } public Node build(Node root,int left,int right){ if(left==right){ return new Node(left,right,nums[left]); } int mid=(left+right)/2; root=new Node(left,right,0); root.l=build(root.l,left,mid); root.r=build(root.r,mid+1,right); root.sum=root.l.sum+root.r.sum; return root; } public void update(int i, int val) { update(root,i,val); } public void update(Node root,int i,int val){ if(root.left==root.right&&root.left==i){ root.sum=val;return; } int mid=(root.left+root.right)/2; if(i<=mid) update(root.l,i,val); else update(root.r,i,val); root.sum=root.l.sum+root.r.sum; } public int sumRange(int i, int j) { return query(root,i,j); } public int query(Node root,int i,int j){ if(root.left==i&&root.right==j){ return root.sum; } int mid=(root.left+root.right)/2; if(mid>=j) return query(root.l,i,j); else if(mid<i){ return query(root.r,i,j); }else{ return query(root.l,i,mid)+query(root.r,mid+1,j); } }}class Node{int left,right;Node l,r;int sum;public Node(int left, int right, int sum) {this.left = left;this.right = right;this.sum = sum;}}
阅读全文
0 0
- 线段树(segment tree)
- 线段树(Segment Tree)
- 线段树(segment tree)
- segment tree(线段树)
- Segment Tree(线段树)
- 线段树(segment tree)
- 线段树(segment tree)
- 线段树(segment tree)
- 线段树(segment tree)
- 线段树(segment tree)
- 线段树(segment tree)
- 线段树(segment tree)
- segment tree(线段树)
- 线段树(Segment Tree)简介
- 线段树(segment tree) code
- 浅谈线段树 Segment Tree
- Segment Tree-线段树学习
- XTU1238:Segment Tree(线段树)
- 数列
- rn 通讯录树状结构
- JS如何判断是否为ie浏览器的方法(包括IE10、IE11在内)
- Shell脚本与vi编辑器:vi启动与退出、工作模式、命令大全
- Android 笔记-RecyclerView简单使用
- Segment Tree(线段树)
- 网易—不要二
- Lucene学习总结之四:Lucene索引过程分析(2)
- CountDownLatch与CyclicBarrier
- Linux目录结构和常用命令
- 表格和表单
- 菜鸟学设计模式----外观模式
- AndroidManifest.xml文件的android:supportsRtl属性详解
- 图论1