JAVA线段树模板
2024-09-08 19:30:21
public class LineTree{
int[] tree,nums;
int n;
public LineTree(int[] nums){
this.nums = nums;
n = nums.length;
tree = new int[n*4];
build(0, 0, n-1);
}
// 建立线段树
private void build(int node, int left, int right){
if(left == right){
tree[node] = nums[left];
}
int mid = left + ((left + right)>> 1);
build(2*node + 1, left, mid);
build(2*node + 2, mid + 1, right);
tree[node] = tree[2*node + 1] + tree[2*node + 2];
}
// 更新线段树
public void update(int node, int left, int right, int idx, int val){
if(left > right) return;
else if(left == right){
nums[left] = val;
tree[node] = val;
}else{
int mid = left + ((left + right)>> 1);
if(idx >= left && idx <= mid)
update(node * 2 + 1, left, mid, idx, val);
else
update(node * 2 + 2, mid + 1, right, idx, val);
tree[node] = tree[node*2 + 1] + tree[node*2 + 2];
}
}
// 查询线段树
public int query(int node, int left, int right, int L, int R){
if(right < L || left > R) return 0;
else if(left == right) return tree[node];
else if(L<= left && R >= right)return tree[node];
else{
int mid = left + ((right - left) >> 1);
return query(node*2+1, left, mid,L,R) + query(node*2+2, mid+1, right, L, R);
}
}
}
最新文章
- Collection和Collections的区别?
- bzoj 2527: [Poi2011]Meteors 整体二分
- Enum
- HBASE架构解析(二)
- OS X open finder here in terminal
- Spring4.0学习笔记(12) —— JDBCTemplate 操作数据库
- Linux JDK 的安装卸载
- 低版本eclipse导入高版本eclipse创建项目报错问题
- Java爬虫——B站弹幕爬取
- javascript:将URL的参数列表解析为一个对象
- Edusoho之LAMP环境搭建
- eclipse启动web应用
- Codeforces Round #542 [Alex Lopashev Thanks-Round] (Div. 1)C. Morse Code
- 6J - 盐水的故事
- [字符串][NOIP2012]Vigen&#232;re密码
- Vue 父组件ajax异步更新数据,子组件props获取不到
- 042 将数据导入hive,将数据从hive导出
- c#不同数组之间的转换【转载,消化自动删除】
- Latex基本用法
- AndroidStudio配置LitePal
热门文章
- 饮料换购【第六届蓝桥杯省赛C++A/C组,第六届蓝桥杯省赛JAVAB组】
- 《Effective C++》设计与声明章节
- 请求量突增一下,系统有效QPS为何下降很多?
- Flutter帧率监控 | 由浅入深,详解获取帧率的那些事
- 基础分类算法_KNN算法
- 论文翻译:2022_PercepNet+: A Phase and SNR Aware PercepNet for Real-Time Speech Enhancement
- 分布式id的方案
- 线程基础知识11-CAS+自旋锁
- MySQL数据库报1055错误
- JS 格式化时间字符串