线段树(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 , 表示 ...
随机推荐
- pycharm template 设置
${PROJECT_NAME} - 当前Project名称; (the name of the current project. ) ${NAME} -创建文件的对话框中制定的文件名; (the na ...
- 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(11.1)- FlexSPI NOR连接方式大全(RT1015/1020/1050)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RT1015/1020/1050三款MCU的FlexSPI NOR启动的连接方式. 由于i.MXRT内部没有非易失性存储 ...
- 题解【[USACO05NOV]奶牛玩杂技】
\[ \texttt{Description} \] 有 \(n\) 头牛,每头牛都有自己的体重 \(W_i\) 和力量 \(S_i\) . 将这 \(n\) 头牛摞在一起,每头牛的压扁指数定义为:压 ...
- .NET Core MVC 静态文件应用
一.静态文件应用方面 ASP.NET Core 静态文件应用,主要分为两方面:网站访问和静态文件整合 二.案例 1.访问静态文件 我们都知道,在 ASP.NET 项目中,我们的静态文件一般要放在 ww ...
- leaflet结合turf.js实现多边形分割(附源码下载)
前言 leaflet 入门开发系列环境知识点了解: leaflet api文档介绍,详细介绍 leaflet 每个类的函数以及属性等等 leaflet 在线例子 leaflet 插件,leaflet ...
- uniapp-使用心得
<view class="cu-item flex-sub" :class="index==TabCur?'text-orange cur':''" v- ...
- 使用JDK工具进行Java服务器应用程序故障排除
Java性能调优指南–有关提高Java代码性能的各种技巧. 最近又学到了很多新知识,感谢优锐课老师细致地讲解,这篇博客记录下自己所学所想. 1. 介绍 在Java世界中,我们大多数人习惯于在Java应 ...
- C#方法中的各类参数
居家隔离的第26天,还在持续的疫情着实让人担忧,看着每天新增的确认人数数字,也在为那些家庭祝福,每当想想那不是一个数字是一条条鲜活的生命时就格外沉重.利用闲在家里的时间巩固C#语言的一个难点.最近在温 ...
- C#的冒泡排序
C#实现的从小到大的冒泡排序: public void BubbleSort(int[] array) { int length = array.Length; ; i < length - ; ...
- git rebase -- 能够将分叉的分支重新合并.
git rebase