线段树
时间:2019-08-28
本文章向大家介绍线段树,主要包括线段树使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
//单点修改、区间查询
int t[maxn]={0}; void build_tree(int node,int start,int end) { if(start==end) { t[node]=a[start]; return ; } int left=2*node+1; //左节点的坐标 int right=2*node+2; //右节点的坐标 int mid=(start+end)/2; build_tree(left,start,mid); //递归建树 build_tree(right,mid+1,end); t[node]=t[left]+t[right]; } void update(int node,int start,int end,int index,int val) { if(start==end) { a[index]=val; t[node]=val; return ; } int left=node*2+1; int right=node*2+2; int mid=(start+end)/2; if(index>=start&&index<=mid) { update(left,start,mid,index,val); } else { update(right,mid+1,end,index,val); } t[node]=t[right]+t[left]; } int query(int node,int start,int end,int L,int R) { //不在计算范围之内 if(R<start||L>end) return 0; //整块在计算范围内 else if(L<=start&&R>=end) return t[node]; //计算到叶节点 else if(start==end) return t[node]; int mid=(start+end)/2; int left=node*2+1; int right=node*2+2; int sumleft=query(left,start,mid,L,R); int sumright=query(right,mid+1,end,L,R); return sumleft+sumright; }
原文地址:https://www.cnblogs.com/wronin/p/11422441.html
- 【经验总结】Java在ACM算法竞赛编程中易错点
- 【Java学习笔记之六】java三种循环(for,while,do......while)的使用方法及区别
- 类A是公共的,应在名为A.java的文件中声明错误
- 逆天通用水印支持Winform,WPF,Web,WP,Win10。支持位置选择(9个位置 ==》[X])
- 【Java学习笔记之七】java函数的语法规则总结
- BZOJ 3038: 上帝造题的七分钟2【线段树区间开方问题】
- BZOJ 3211: 花神游历各国【线段树区间开方问题】
- WP、Win10开发或者WPF开发时绘制自定义窗体~例如:一个手机
- 【Java学习笔记之八】JavaBean中布尔类型使用注意事项
- BZOJ 1597: [Usaco2008 Mar]土地购买【斜率优化+凸包维护】
- BZOJ 1046: [HAOI2007]上升序列【贪心+二分状态+dp+递归】
- 【Java学习笔记之九】java二维数组及其多维数组的内存应用拓展延伸
- BZOJ 1293: [SCOI2009]生日礼物【单调队列】
- Javascript缓存投毒学习与实战
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- php基础教程 第一步 环境配置及helloworld
- 推荐两个Docker配置检查与启动异常修复方法脚本
- 持续集成gitlab-ci.yml配置文档基础
- php基础教程 第二步 通俗易懂的学习变量、常量与数据类型
- git | Windows下如何利用Linux的命令
- python3 爬虫第三步 本文包你学会正则 不会就来锤我
- php基础教程 第三步 学习字符串及相关函数
- php基础教程 第四步 学习运算符
- php基础教程 第五步 逻辑控制
- php基础教程 第六步 学习数组以及条件判断switch补充
- php基础教程 第七步数组补充及循环基础
- php基础教程 第八步循环补充
- php基础教程 第九步 自定义函数
- php基础教程 第十步 阶段性知识补充
- php基础教程 第十一步 面向对象