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的更多相关文章

  1. 线段树 区间开方区间求和 & 区间赋值、加、查询

    本文同步发表于 https://www.zybuluo.com/Gary-Ying/note/1288518 线段树的小应用 -- 维护区间开方区间求和 题目传送门 约定: sum(i,j) 表示区间 ...

  2. HDU1166(线段树 +更新单点,求区间总和)、HDU1754(线段树 + 更新单点,求区间最大值)

    线段树简单应用 先附上几张图便与理解,大佬文章传送门1.传送门2 HDU1166:题目描述 线段树 +更新单点,求区间总和 代码如下(递归版) #include<iostream> #in ...

  3. HDU 1754 I Hate It(线段树之单点更新,区间最值)

    I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  4. ACM_最值差(线段树区间查询最值)

    最值差 Time Limit: 2000/1000ms (Java/Others) Problem Description: 给定N个数A1A2A3A4...AN.求任意区间Ai到Aj中的最大数与最小 ...

  5. HDU 1754 I Hate It(线段树区间查询,单点更新)

    描述 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少. 这让很多学生很反感.不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问.当然,老 ...

  6. POJ_3468 A Simple Problem with Integers 【线段树区间查询+修改】

    一.题目 POJ3468 二.分析 裸的线段树区间查询+修改. 三.AC代码 #include <cstdio> #include <iostream> #include &l ...

  7. HDU 4348 To the moon 可持久化线段树,有时间戳的区间更新,区间求和

    To the moonTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/view.a ...

  8. HZAU 1207 Candies(线段树区间查询 区间修改)

    [题目链接]http://acm.hzau.edu.cn/problem.php?id=1207 [题意]给你一个字符串,然后两种操作:1,将区间L,R更新为A或者B,2,询问区间L,R最长的连续的B ...

  9. 【线段树(单点修改,区间求和)】HDU1166 - 敌军布阵

    hdu1166 敌兵布阵,单点修改,区间求和. [ATTENTION]MAXN要开成节点数的4倍,开得不够会提示TLE. #include<iostream> #include<cs ...

  10. hdu 1698 线段树(成段替换 区间求和)

    一条钩子由许多小钩子组成 更新一段小钩子 变成铜银金 价值分别变成1 2 3 输出最后的总价值 Sample Input11021 5 25 9 3 Sample OutputCase 1: The ...

随机推荐

  1. python爬虫循环导入MySql数据库

    1.开发环境 操作系统:win10    Python 版本:Python 3.5.2   MySQL:5.5.53 2.用到的模块 没有的话使用pip进行安装:pip install xxx     ...

  2. appium+Python 启动app(一)

    当我们appium和Python环境都配置好了,如何启动我们第一个app呢?下面介绍appium+Python启动app的操作步骤,为了能够详细查看,我们这里使用夜游神模拟器进行示范. 测试项目:QQ ...

  3. Docker镜像的构成__docker commit

    镜像是容器的基础,每次执行docker run的时候都会制定哪个镜像作为容器运行的基础.在之前的例子中,我们所使用的都来自于Docker Hub的镜像.直接使用这些镜像是可以满足一定的需求,而当这些镜 ...

  4. Redis的两种持久化方式-快照持久化和AOF持久化

    Redis为了内部数据的安全考虑,会把本身的数据以文件形式保存到硬盘中一份,在服务器重启之后会自动把硬盘的数据恢复到内存(redis)的里边,数据保存到硬盘的过程就称为"持久化"效 ...

  5. LeetCode第二天&第三天

    leetcode 第二天 2017年12月27日 4.(118)Pascal's Triangle JAVA class Solution { public List<List<Integ ...

  6. Spring data mongodb @CreatedBy@LastModifiedBy@CreatedBy@LastModifiedBy SpringSecurityAuditorAware,只记录用户名

    要在Spring data mongodb 中使用@CreatedBy@LastModifiedBy@CreatedBy@LastModifiedBy  这四个注解 必须实现 SpringSecuri ...

  7. spring oauth2 ,spring security整合oauth2.0 JdbcTokenStore实现 解决url-pattern .do .action

    参考以下两个文章: http://www.cnblogs.com/0201zcr/p/5328847.html http://wwwcomy.iteye.com/blog/2230265 web.xm ...

  8. C语言拼接字符串以及进制转换

    #include<stdio.h> #include<stdlib.h> #include<string.h> char *join1(char *, char*) ...

  9. java:条件表达式

    if (results.length() == 0) { return ""; } else { return results.substring(0, results.lengt ...

  10. 2015最新Android学习线路图

    Android是一个以Linux为基础的半开源操作系统,主要用于移动设备,由Google和开放手持设备联盟开发与领导.据2011年初数据显示仅正式上市两年的操作系统Android已经跃居全球最受欢迎的 ...