白天听了一天的dpdp,晚上复习一下线段树的板子

//线段树维护区间增加(减少),区间最大值,区间最小值,区间和 #include<bits/stdc++.h>//宏命令替换常量和左右儿子标记,以及当前线段树节点表示的[l,r]的mid值 #define lc (p<<1)
#define rc (p<<1|1)
#define mid (T[p].l+T[p].r>>1)
#define N 100005using namespace std;//线段树的储存以及其它变量的复制
struct Node{int l,r,lz,sum,maxn,minn;}T[N<<2];
int n,m,a[N];//向上合并
inline void pushup(int p){T[p].sum=T[lc].sum+T[rc].sum;T[p].maxn=max(T[lc].maxn,T[rc].maxn);T[p].minn=min(T[lc].minn,T[rc].minn);
}//修改当前节点的信息
inline void pushnow(int p,int v){T[p].sum+=(T[p].r-T[p].l+1)*v;T[p].lz+=v,T[p].maxn+=v,T[p].minn+=v;
}//向下传递标记
inline void pushdown(int p){if(T[p].lz==0)return;pushnow(lc,T[p].lz),pushnow(rc,T[p].lz);T[p].lz=0;
}//建树的函数
inline void build(int p,int l,int r){//计算当前线段树节点表示的左右端点,并给标记赋初值 T[p].l=l,T[p].r=r,T[p].lz=0;//递归到叶节点初始化 if(l==r){T[p].sum=T[p].maxn=T[p].minn=a[l];return;}//递归建树 build(lc,l,mid),build(rc,mid+1,r);pushup(p);
}//区间修改函数
inline void update(int p,int ql,int qr,int v){//不合法情况的剪枝 if(T[p].l>qr||T[p].r<ql)return;//可以直接修改当前整个区间 if(ql<=T[p].l&&T[p].r<=qr){pushnow(p,v);return;}//下传标记 pushdown(p);//递归修改左右儿子 if(qr<=mid)update(lc,ql,qr,v);else if(ql>mid)update(rc,ql,qr,v);else update(lc,ql,mid,v),update(rc,mid+1,qr,v);//信息合并 pushup(p);
}
inline int query_sum(int p,int ql,int qr){//不合法情况的剪枝 if(T[p].l>qr||T[p].r<ql)return 0;//可以直接返回当前整个区间和 if(ql<=T[p].l&&T[p].r<=qr)return T[p].sum;//下传标记pushdown(p);//递归询问左右儿子if(qr<=mid)return query_sum(lc,ql,qr);if(ql>mid)return query_sum(rc,ql,qr);return query_sum(lc,ql,mid)+query_sum(rc,mid+1,qr);
}
inline int query_max(int p,int ql,int qr){//不合法情况的剪枝 if(T[p].l>qr||T[p].r<ql)return -0x3f3f3f3f;//可以直接返回当前整个区间最大值 if(ql<=T[p].l&&T[p].r<=qr)return T[p].maxn;//下传标记pushdown(p);//递归询问左右儿子if(qr<=mid)return query_max(lc,ql,qr);if(ql>mid)return query_max(rc,ql,qr);return max(query_max(lc,ql,mid),query_max(rc,mid+1,qr));
}
inline int query_min(int p,int ql,int qr){//不合法情况的剪枝 if(T[p].l>qr||T[p].r<ql)return 0x3f3f3f3f;//可以直接返回当前整个区间最小值 if(ql<=T[p].l&&T[p].r<=qr)return T[p].minn;//下传标记pushdown(p);//递归询问左右儿子if(qr<=mid)return query_min(lc,ql,qr);if(ql>mid)return query_min(rc,ql,qr);return min(query_min(lc,ql,mid),query_min(rc,mid+1,qr));
}//读入优化函数
inline int read(){int ans=0,w=1;char ch=getchar();while(!isdigit(ch)){if(ch=='-')w=-1;ch=getchar();}while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();return ans*w;
}
int main(){return 0;}

转载于:https://www.cnblogs.com/ldxcaicai/p/9738451.html

2018.07.11 线段树基本模板复习相关推荐

  1. 【线段树合并】解题报告:luogu P4556雨天的尾巴 (树上对点差分 + 动态开点 + 线段树合并)线段树合并模板离线/在线详解

    题目链接:雨天的尾巴 本题本身是一个非常简单的一道树上差分的模板题,但是由于变态的数据范围,我们直接用数组是存不下的(本来使用一颗普通的线段树直接维护最大值即可.但是本题的空间只有128MB,直接按照 ...

  2. [九省联考2018]IIIDX 贪心 线段树

    ~~~题面~~~ 题解: 一开始翻网上题解看了好久都没看懂,感觉很多人都讲得不太详细,所以导致一些细节的地方看不懂,所以这里就写详细一点吧,如果有不对的or不懂的可以发评论在下面. 首先有一个比较明显 ...

  3. codevs 4927 线段树练习5 线段树基本操作模板

    4927 线段树练习5  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题目描述 Description 有n个数和5种操作 add a b c:把区间[a,b ...

  4. 【CCCC】L3-017 森森快递 (30分),线段树rmq模板+贪心排序

    problem L3-017 森森快递 (30分) 森森开了一家快递公司,叫森森快递.因为公司刚刚开张,所以业务路线很简单,可以认为是一条直线上的N个城市,这些城市从左到右依次从0到(N−1)编号.由 ...

  5. 【luogu3372】线段树 1 模板

    题面 已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.求出某区间每一个数的和 题解 区间修改+区间查询 线段树模板 #include<iostream> #defi ...

  6. 蒟蒻的线段树入门模板笔记

    线段树适合处理那些问题? 线段树是算法竞赛中常用的用来维护 区间信息 的数据结构. 线段树可以在O(logN)的时间复杂度内实现单点修改.区间修改.区间查询(区间求和,求区间最大值,求区间最小值,求区 ...

  7. BZOJ.5249.[九省联考2018]iiidx(贪心 线段树)

    BZOJ LOJ 洛谷 \(d_i\)不同就不用说了,建出树来\(DFS\)一遍. 对于\(d_i\)不同的情况: Solution 1: xxy tql! 考虑如何把这些数依次填到树里. 首先对于已 ...

  8. BZOJ4034 树上操作(树剖 线段树大模板)

    BZOJ4034 long long 是大坑点 貌似long long 跟int 乘起来会搞事情?... A了这题线段树和树剖的基础OK 嘛 重点过掉的还是线段树区间更新的lazy tag吧 #inc ...

  9. 【线段树】线段树及其相关 复习

    划分树: poj2104 K-th number /*******************************\* @prob: poj2104 K-th number ** @auth: Wan ...

最新文章

  1. 深入理解MySQL的外连接、内连接、交叉连接
  2. hessian、rmi、dubbo与rpc关系
  3. python图片内容识别_ubuntu 安装 pytesseract 模块进行图片内容识别
  4. jQuery中的join方法
  5. Docker 概述 与 CentOS 上安装、卸载、启动
  6. python修改app定位_APP自动化中三大定位工具
  7. traceroute和tracert原理
  8. 进销存系统怎么部署到自己服务器,衡水进销存系统部署
  9. Air202入坑指南1---lua开发环境的安装
  10. Pr_cc 学习笔记(二)鬼畜剪辑
  11. STM32F103C8T6详细引脚表
  12. 《肖申克的救赎》- 阅后小记
  13. ActiveX控件的注册和反注册
  14. Nature子刊:研究者研制出胞内和胞外神经电信号同步采集的多模态电极
  15. python进入目录 cd_Linux cd命令:切换目录
  16. 推荐算法——NCF知识总结代码实现
  17. 小区宽带需求分析解决方案
  18. Python的网易云音乐数据分析系统 爬虫 echarts可视化 Flask框架 音乐推荐系统 源码下载
  19. 中兴路由器查看时间_中兴路由器简单命令
  20. jmeter性能测试使用梯度测试的方法

热门文章

  1. BZOJ3139/BZOJ1306 HNOI2013比赛/CQOI2009循环赛(搜索)
  2. POJ3265 Problem Solving ——动态规划——Pku3265
  3. u-boot移植第三弹——移植2013.10u-boot到RealARM210 cortex-A8开发板(支持moviNAND_Fusing_Tool_v2.0)
  4. 6410 实现 linux 串口驱动详解
  5. linux 进程装入 物理内存 页表,linux内存管理解析----linux物理,线性内存布局及页表的初始化...
  6. php日志导出oracle,一个php导出oracle库的php代码
  7. python list append tuple_Python之list、tuple、dict、set
  8. 世纪联华的 Serverless 之路
  9. 独家下载!Java工程师成神必备宝典
  10. 物联网的四种计算类型