【模板】线段树(sum)
时间:2019-10-11
本文章向大家介绍【模板】线段树(sum),主要包括【模板】线段树(sum)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
const int maxn = 100010; int a[100010]; struct tree { int a; int l, r; int tag; tree() { tag = 0; l = 0; r = 0; a = 0; } }node[maxn]; inline int lc(int x) { return x << 1; } inline int rc(int x) { return x << 1 | 1; } void push_up_sum(int x) { node[x].a = node[lc(x)].a + node[rc(x)].a; } void build(int x, int l, int r) { node[x].l = l; node[x].r = r; if (l == r) { node[x].a = a[l]; return; } int mid = (l + r) >> 1; build(lc(x), l, mid); build(rc(x), mid + 1, r); push_up_sum(x); } inline void f(int x, int k) { node[x].tag += k; node[x].a += k * (node[x].r - node[x].l + 1); } inline void push_down(int x) { f(lc(x), node[x].tag); f(rc(x), node[x].tag); node[x].tag = 0; } inline void update(int left, int right, int x, int k) { if (left <= node[x].l && node[x].r <= right) { node[x].a += k * (node[x].r - node[x].l + 1); node[x].tag += k; return; } push_down(x); int mid = (node[x].l + node[x].r) >> 1; if (left <= mid) update(left, right, lc(x), k); if (right > mid) update(left, right, rc(x), k); push_up_sum(x); } long long int query(int left, int right, int x) { long long int res = 0; if (left <= node[x].l && node[x].r <= right) return node[x].a; int mid = (node[x].l + node[x].r) >> 1; if (left <= mid) res += query(left, right, lc(x)); if (right > mid) res += query(left, right, rc(x)); return res; }
原文地址:https://www.cnblogs.com/thjkhdf12/p/11653565.html
- 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 数组属性和方法
- PyTorch中的model.zero_grad() vs optimizer.zero_grad()
- Flask 入门系列教程(四)
- 代码审计
- ELF文件格式的详解
- 一个开源的RTOS的Chibios的评测
- CS学习笔记 | 25、邮件防御
- CS学习笔记 | 26、杀毒软件
- Python-pymysql
- 我又踩坑了!如何为HttpClient请求设置Content-Type标头?
- 在CentOS7上安装开源Verilog仿真工具EpicSim
- 【CS学习笔记】27、applet渗透测试手法
- Python-WSGI接口
- CentOS7-Nginx配置Let's-Encrypt-SSL证书
- CentOS7-Nginx编译安装
- 总被审稿人提起的多重假设检验校正是什么?