线段树 (区间查询最大 区间求和 区间加)带lazy
const int N=1e5+; struct Segment_tree
{
struct Node
{
int val,Max,lazy;
int Size,son[];
void init()
{
lazy=son[]=son[]=Size=val=Max=val=;
}
} T[N*];
int cnt,root; void init(int l,int r,int *a)
{
cnt=;
root=build(l,r,a);
} void update(int pos)
{
if(T[pos].Size==)return ;
T[pos].val=T[T[pos].son[]].val+T[T[pos].son[]].val;
if(T[T[pos].son[]].lazy)
{
T[pos].val+=T[T[pos].son[]].lazy*T[T[pos].son[]].Size;
}
if(T[T[pos].son[]].lazy)
{
T[pos].val+=T[T[pos].son[]].lazy*T[T[pos].son[]].Size;
}
T[pos].Max=max(T[T[pos].son[]].Max+T[T[pos].son[]].lazy,T[T[pos].son[]].Max+T[T[pos].son[]].lazy);
} void pushdown(int pos)
{
if(pos==)return ;
if(T[pos].lazy)
{
if(T[pos].son[])
{
int x=T[pos].son[];
if(T[x].Size==)
{
T[x].val+=T[pos].lazy;
T[x].Max+=T[pos].lazy;
}
else
{
T[x].lazy+=T[pos].lazy;
}
}
if(T[pos].son[])
{
int x=T[pos].son[];
if(T[x].Size==)
{
T[x].val+=T[pos].lazy;
T[x].Max+=T[pos].lazy;
}
else
{
T[x].lazy+=T[pos].lazy;
}
}
T[pos].lazy=;
}
} int build(int l,int r,int *a)
{
int pos=++cnt;
T[pos].init();
T[pos].Size=r-l+;
if(l==r)
{
T[pos].val=a[l];
T[pos].Max=a[l];
return pos;
}
int mid=(l+r)>>;
T[pos].son[]=build(l,mid,a);
T[pos].son[]=build(mid+,r,a);
update(pos);
return pos;
} void add(int L,int R,int l,int r,int v,int pos=)
{
if(L==l&&R==r)
{
if(l==r)
{
T[pos].val+=v;
T[pos].Max+=v;
}
else
{
T[pos].lazy+=v;
}
return ;
}
int mid=(L+R)>>;
if(r<=mid)
add(L,mid,l,r,v,T[pos].son[]);
else if(l>mid)
add(mid+,R,l,r,v,T[pos].son[]);
else
{
add(L,mid,l,mid,v,T[pos].son[]);
add(mid+,R,mid+,r,v,T[pos].son[]);
}
update(pos);
} int query_Max(int L,int R,int l,int r,int pos=)
{
pushdown(pos);
update(pos);
if(L==l&&R==r)
{
return T[pos].Max;
}
int mid=(L+R)>>;
if(r<=mid)
return query_Max(L,mid,l,r,T[pos].son[]);
else if(l>mid)
return query_Max(mid+,R,l,r,T[pos].son[]);
else
return max(query_Max(L,mid,l,mid,T[pos].son[]),query_Max(mid+,R,mid+,r,T[pos].son[]));
} int query_Sum(int L,int R,int l,int r,int pos=)
{
pushdown(pos);
update(pos);
if(L==l&&R==r)
{
return T[pos].val;
}
int mid=(L+R)>>;
if(r<=mid)
return query_Sum(L,mid,l,r,T[pos].son[]);
else if(l>mid)
return query_Sum(mid+,R,l,r,T[pos].son[]);
else
return query_Sum(L,mid,l,mid,T[pos].son[])+query_Sum(mid+,R,mid+,r,T[pos].son[]);
} }tree;
线段树 (区间查询最大 区间求和 区间加)带lazy的更多相关文章
- 线段树 区间开方区间求和 & 区间赋值、加、查询
本文同步发表于 https://www.zybuluo.com/Gary-Ying/note/1288518 线段树的小应用 -- 维护区间开方区间求和 题目传送门 约定: sum(i,j) 表示区间 ...
- HDU1166(线段树 +更新单点,求区间总和)、HDU1754(线段树 + 更新单点,求区间最大值)
线段树简单应用 先附上几张图便与理解,大佬文章传送门1.传送门2 HDU1166:题目描述 线段树 +更新单点,求区间总和 代码如下(递归版) #include<iostream> #in ...
- HDU 1754 I Hate It(线段树之单点更新,区间最值)
I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- ACM_最值差(线段树区间查询最值)
最值差 Time Limit: 2000/1000ms (Java/Others) Problem Description: 给定N个数A1A2A3A4...AN.求任意区间Ai到Aj中的最大数与最小 ...
- HDU 1754 I Hate It(线段树区间查询,单点更新)
描述 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少. 这让很多学生很反感.不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问.当然,老 ...
- POJ_3468 A Simple Problem with Integers 【线段树区间查询+修改】
一.题目 POJ3468 二.分析 裸的线段树区间查询+修改. 三.AC代码 #include <cstdio> #include <iostream> #include &l ...
- HDU 4348 To the moon 可持久化线段树,有时间戳的区间更新,区间求和
To the moonTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/view.a ...
- HZAU 1207 Candies(线段树区间查询 区间修改)
[题目链接]http://acm.hzau.edu.cn/problem.php?id=1207 [题意]给你一个字符串,然后两种操作:1,将区间L,R更新为A或者B,2,询问区间L,R最长的连续的B ...
- 【线段树(单点修改,区间求和)】HDU1166 - 敌军布阵
hdu1166 敌兵布阵,单点修改,区间求和. [ATTENTION]MAXN要开成节点数的4倍,开得不够会提示TLE. #include<iostream> #include<cs ...
- hdu 1698 线段树(成段替换 区间求和)
一条钩子由许多小钩子组成 更新一段小钩子 变成铜银金 价值分别变成1 2 3 输出最后的总价值 Sample Input11021 5 25 9 3 Sample OutputCase 1: The ...
随机推荐
- Effective Java 第三版——33. 优先考虑类型安全的异构容器
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...
- Maven中模块的聚合以及对jar包的继承
我需要将之前的A B C三个模块聚合到一个一个工程中ABC项目中 pom.xml文件中应该这样配置 1.修改packaging里面的配置 <!-- 用于聚合这个项目的时候应该将packaging ...
- Https访问
Let's Encrypt是很火的一个免费SSL证书发行项目,自动化发行证书,证书有90天的有效期.适合个人使用或者临时使用,不用再忍受自签发证书不受浏览器信赖的提示.去年VPS侦探曾经说过Let's ...
- Go语言学习_Win10下安装Go开发环境
关于Go语言有多么值得学习,这里就不做介绍了,既然看了这篇文章,想必是对有学习意向. 这里是在Windows下安装Go环境,去中文社区的下载栏目,https://studygolang.com/dl ...
- haproxy配置文件详解和ACL功能
*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...
- Activity工作过程
Activity工作过程: Activity.startActivity--> Activity.startActivityForResult--> Instrumentation.exe ...
- HTTP协议报文结构及示例
HTTP基本架构 下面我们用一张简单的流程图来展示HTTP协议基本架构,以便大家先有个基本的了解. 9.png Web Client可以是浏览器.搜索引擎.机器人等等一切基于HTTP协议发起http请 ...
- IS-IS 路由协议 总结
第一章 is-is的协议概述 1. 发展史 Is-is最早是iso为osi模型中CLNP而设计的协议,后来根据发展需要,也支持了TCP/IP协议,因此,is-is叫做integrated is-is或 ...
- windows下python3.4安装lxml提示"Unable to find vcvarsall.bat"
"https://pypi.python.org/pypi/lxml/3.6.0"从这个网址直接下载对应的lxml包,exe格式的,直接安装,问题解决!
- javascript 学习笔记 三大特性
<script type="text/javascript"> //封装 function Person (name,age,sal){ this.name=name; ...