线段树(lazy标记)-- 模板
int a[MAXN], ans[MAXN << ], lazy[MAXN << ];
void PushUp(int rt) {
ans[rt] = ans[rt << ] + ans[rt << | ];
}
void PushDown(int rt, int ln, int rn) { //ln表示左子树元素结点个数,rn表示右子树结点个数
if (lazy[rt]) {
lazy[rt << ] += lazy[rt];
lazy[rt << | ] += lazy[rt];
ans[rt << ] += lazy[rt] * ln;
ans[rt << | ] += lazy[rt] * rn;
lazy[rt] = ;
}
}
//建树Build(1,n,1)
void Build(int l, int r, int rt) {
if (l == r) {
ans[rt] = a[l];
return;
}
int mid = (l + r) >> ;
Build(l, mid, rt << );
Build(mid + , r, rt << | );
PushUp(rt);
}
//点更新Add(L,C,1,n,1)
void Add(int L, int C, int l, int r, int rt) {
if (l == r) {
ans[rt] += C;
return;
}
int mid = (l + r) >> ;
//PushDown(rt,mid-l+1,r-mid); 若既有点更新又有区间更新,需要这句话
if (L <= mid)
Add(L, C, l, mid, rt << );
else
Add(L, C, mid + , r, rt << | );
PushUp(rt);
}
//区间更新Upadate(L,R,C,1,n,1)
void Update(int L, int R, int C, int l, int r, int rt) {
if (L <= l && r <= R) {
ans[rt] += C * (r - l + );
lazy[rt] += C;
return;
}
int mid = (l + r) >> ;
PushDown(rt, mid - l + , r - mid);
if (L <= mid)
Update(L, R, C, l, mid, rt << );
if (R > mid)
Update(L, R, C, mid + , r, rt << | );
PushUp(rt);
}
//区间查询Query(L,R,1,n,1)
LL Query_sum(int L, int R, int l, int r, int rt) {
if (L <= l && r <= R)
return ans[rt];
int mid = (l + r) >> ;
PushDown(rt, mid - l + , r - mid); //若更新只有点更新,不需要这句
LL ANS = ;
if (L <= mid)
ANS += Query_sum(L, R, l, mid, rt << );
if (R > mid)
ANS += Query_sum(L, R, mid + , r, rt << | );
return ANS;
}
//区间最大值
int Query_max(int L, int R, int l, int r, int rt) {
if (L <= l&&R <= r)
return ans[rt];
int mid = (l + r) >> ;
PushDown(rt, mid - l + , r - mid);
int ANS = ;
if (L <= mid) ANS = max(ANS, Query_max(L, R, l, mid, rt << ));
if (R > mid) ANS = max(ANS, Query_max(L, R, mid + , r, rt << | ));
return ANS;
}
//单点查询
int Query(int L, int R, int l, int r, int rt) {
if (L == l&&R == r)
return ans[rt];
int mid = (l + r) >> ;
PushDown(rt, mid - l + , r - mid);
int ANS = ;
if (L <= mid)
ANS = Query(L, R, l, mid, rt << );
if (R > mid)
ANS = Query(L, R, mid + , r, rt << | );
return ANS;
}
线段树(lazy标记)-- 模板的更多相关文章
- poj3468 线段树+lazy标记
A Simple Problem with Integers Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 92921 ...
- POJ3237 Tree(树剖+线段树+lazy标记)
You are given a tree with N nodes. The tree’s nodes are numbered 1 through N and its edges are numbe ...
- 线段树+lazy标记 2019年8月10日计蒜客联盟周赛 C.小A的题
题目链接:https://nanti.jisuanke.com/t/40852 题意:给定一个01串s,进行m次操作,|s|<=1e6,m<=5e5 操作有两种 l r 0,区间[l,r] ...
- HDU_1698 Just a Hook(线段树+lazy标记)
pid=1698">题目请点我 题解: 接触到的第一到区间更新,须要用到lazy标记.典型的区间着色问题. lazy标记详情请參考博客:http://ju.outofmemory.cn ...
- POJ 3225 线段树+lazy标记
lazy写崩了--. 查了好久 /* U-> [l,r]–>1 I-> [1,l-1] [r+1,+无穷] –>0 D-> [l,r]–>0 C-> [1,l ...
- 线段树+Lazy标记(我的模版)
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef unsigned long long ...
- C++-POJ2777-Count Color[线段树][lazy标记][区间修改]
分析:https://www.bilibili.com/read/cv4777102 #include <cstdio> #include <algorithm> using ...
- 线段树lazy标记??Hdu4902
Nice boat Time Limit: 30000/15000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) To ...
- hdu-3397 Sequence operation 线段树多种标记
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3397 题目大意: 0 a b表示a-b区间置为0 1 a b表示a-b区间置为1 2 a b表示a- ...
- hdu1698(线段树区间替换模板)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1698 题意: 第一行输入 t 表 t 组测试数据, 对于每组测试数据, 第一行输入一个 n , 表示 ...
随机推荐
- XAMPP与ISS在80端口冲突问题
1.在control界面上通过apach行的config,选择httpd.conf,将其中的listen和ServerName localhost:后面的80改为8080. 2.打开control最右 ...
- centos6.5下编译安装单实例MySQL5.5
MySQL5.5版本安装3步曲: 1) cmake 2) make 3) make install 查看系统版本号 [root@meinv01 ~]# cat /etc/redhat-release ...
- delphi制作res文件
第一步:将brcc32.exe拷贝到某个目录,如“res文件”第二步:制作rc文件1.在“res文件”中新建一个文本文件resources.rc:2.文本文件中每一行写一个资源,资源格式为:资源标识名 ...
- asp.net MVC项目开发之统计图echarts柱状图(一)
echarts统计图doc网址:http://echarts.baidu.com/echarts2/index.html 使用echarts,需要引用在js中,如果你已经下载echarts的js包,可 ...
- c# 匿名方法(函数) 匿名委托 内置泛型委托 lamada
匿名方法:通过匿名委托 .lamada表达式定义的函数具体操作并复制给委托类型: 匿名委托:委托的一种简单化声明方式通过delegate关键字声明: 内置泛型委托:系统已经内置的委托类型主要是不带返回 ...
- 多线程笔记 - disruptor
disruptor 可以理解为一个生产消费的框架. 具体翻译教程: http://ifeve.com/disruptor-getting-started/ 这个框架从数据上看, 是很强大的. 号称1s ...
- android sdk manager 无法更新,解决连不上dl.google.com的问题
感谢博主的帮助,入口在这:https://www.jianshu.com/p/8fb367a51b9f?utm_campaign=haruki&utm_content=note&utm ...
- maven 听视频笔记
使用 pom.xml 配置 收藏 所听视频来源: https://www.bilibili.com/video/av54119831?p=8 视频: maven idea 配置服务器 tomcat ...
- 5.Python安装依赖(包)模块方法介绍
1.前提条件 1). 确保已经安装需要的Python版本 2). 确保已经将Python的目录加入到环境变量中 2. Python安装包的几种常用方式 1). pip安装方式(正常在线安装) 2). ...
- java代码生成器 快速开发平台 二次开发 外包项目利器 springmvc SSM后台框架源码
. 权限管理:点开二级菜单进入三级菜单显示 角色(基础权限)和按钮权限 角色(基础权限): 分角色组和角色,独立分配菜单权限和增删改查权限. 按钮权限: 给角色分配按钮权限.2 ...