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. apache 访问日志access_log 配置和解析 rotatelogs分割日志

    一.解析访问日志        apache 的访问日志记载着大量的信息,学会高效快捷的读出其中关键信息对我们的工作有极大帮助.       如果Apache的安装方式是默认安装,服务器一运行就会有两 ...

  2. linux系统的启动流程梳理

    1. 不同版本的linux系统的启动流程 1.1 centos6.x系统的启动流程 其详细启动步骤如下: 1)开机,BIOS自检,检查各个硬件是否正常 2)读取硬盘MBR信息,引导系统启动 3)加载g ...

  3. android手机拍照旋转的问题

    android开发中,遇到过手机拍照,明明是竖着拍的,显示的结果却是横这的,困扰了很久,找了很久找了一种解决方法: ExifInterface exifInterface = new ExifInte ...

  4. A——大整数加法(HDU1002)

    题目: I have a very simple problem for you. Given two integers A and B, your job is to calculate the S ...

  5. 单元测试-xUnit总结

    xUnit总结 什么是xUnit xUnit.net是针对.NET Framework的免费,开源,以社区为中心的单元测试工具. 自动化测试的优点 可以频繁的进行测试 可以在任何时间进行测试,也可以按 ...

  6. C语言基础五 数组的应用

    .根据用户输入的10人成绩并将其保存到数组中,求最高成绩,最低成绩和平均成绩 int scoure[10];//存储10个数据的数组 int i; int sum;//总成绩 int max,min, ...

  7. 头部布局,搜索验证和AJAX自动搜索提示,并封装成组件,提高代码复用性

    index.html 头部区结构和样式 效果图 静态样式 index.html中的部分 <!-- 头部 --> <div class="header"> & ...

  8. 【React Native】某个页面禁用物理返回键

    1.引入组件 import { BackHandler, } from 'react-native'; 2.添加监听 componentDidMount(): void { BackHandler.a ...

  9. 【01】HTML_day01_01-前言&WEB标准

    typora-copy-images-to: media 第01阶段.前端基础.认识WEB 基础班学习目标 目标: 能根据psd文件,用HTML+CSS 布局出符合W3C规范的网页. 网站首页 列表页 ...

  10. 通过sql的stuff 把一列几行的记录拼接在一行一个字段

    ---通过sql的stuff 把一列几行的记录拼接在一行一个字段 select FID,a.FCustomerID as 工地ID , 应验收节点 = (stuff((select ',' + isn ...