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标记)-- 模板的更多相关文章

  1. poj3468 线段树+lazy标记

    A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 92921   ...

  2. 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 ...

  3. 线段树+lazy标记 2019年8月10日计蒜客联盟周赛 C.小A的题

    题目链接:https://nanti.jisuanke.com/t/40852 题意:给定一个01串s,进行m次操作,|s|<=1e6,m<=5e5 操作有两种 l r 0,区间[l,r] ...

  4. HDU_1698 Just a Hook(线段树+lazy标记)

    pid=1698">题目请点我 题解: 接触到的第一到区间更新,须要用到lazy标记.典型的区间着色问题. lazy标记详情请參考博客:http://ju.outofmemory.cn ...

  5. POJ 3225 线段树+lazy标记

    lazy写崩了--. 查了好久 /* U-> [l,r]–>1 I-> [1,l-1] [r+1,+无穷] –>0 D-> [l,r]–>0 C-> [1,l ...

  6. 线段树+Lazy标记(我的模版)

    #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef unsigned long long ...

  7. C++-POJ2777-Count Color[线段树][lazy标记][区间修改]

     分析:https://www.bilibili.com/read/cv4777102 #include <cstdio> #include <algorithm> using ...

  8. 线段树lazy标记??Hdu4902

    Nice boat Time Limit: 30000/15000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) To ...

  9. 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- ...

  10. hdu1698(线段树区间替换模板)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1698 题意: 第一行输入 t 表 t 组测试数据, 对于每组测试数据, 第一行输入一个 n , 表示 ...

随机推荐

  1. light oj1170 - Counting Perfect BST卡特兰数

    1170 - Counting Perfect BST BST is the acronym for Binary Search Tree. A BST is a tree data structur ...

  2. CDN&对象存储

    概念 CDN是什么:名词解释不清,加快静态资源访问的技术 CDN原理:将静态资源缓存到用户所在城市 实现 步骤1:注册七牛云账号 https://portal.qiniu.com/signup?cod ...

  3. drf序列化大总结

    目录 一.APIView的请求生命周期 二.序列化组件 视图类中使用序列化 Meta配置类中的配置 自定义校验规则 入库方法 自定义字段 如果有群改操作 重(难)点 三.视图家族 四.路由组件 五.权 ...

  4. 珠峰-6-koa-express

    ####  这里写await和return 的区别是, await后边还可以写代码,而return 不会. ##### koa这里需要注意 这样子方法1比起方法2,少写n个url类似这样的key.

  5. rfc文档

    你会看到很多网上关于标准的rfc文档. 如何阅读rfc 文档. https://juejin.im/post/5bf1948ff265da61553a6c97 从一个普通的RFC文档上升到Intern ...

  6. C语言三(2)

    多重 if...else....else 结构 语法: if(条件1) { 语句1; } else if(条件2) { 语句2; } else if(条件3) { 语句3; } else { 语句N; ...

  7. 关于simplememory theme的设置和感想

    前言 首先,这是我第一次自己个性化博客的主题.如果下文所写如有不妥之处还望大佬指出 参考 这次设置多亏了GitHub上的开源代码:https://github.com/BNDong/Cnblogs-T ...

  8. 【React Native】使用react-native-wechat 进行微信好友、微信朋友圈进行分享

    前提:微信平台注册,请自行百度.本篇主要是针对react native中使用react-native-wechat进行android端的分享. 1.Android版本安装配置方法 在android/s ...

  9. request.getParameterMap获取不到数据问题

    最近在做javaweb项目的过程中发现使用request.getParameterMap( )方法获取jsp页面中的表单数据的时候发现获取不到,检查了好长时间最后发现问题是在jsp页面中. reque ...

  10. xshell/secureCRT连接Linux及其常用命令

    一.xshell:在Windows界面下用来访问远端不同系统下的服务器,从而比较好的达到远程控制终端的目的 下载安装后连接步骤: 二.secureCRT:在Windows下登录UNIX或Linux服务 ...