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. eclipse中创建一个maven项目

    1.什么是Maven Apache Maven 是一个项目管理和整合工具.基于工程对象模型(POM)的概念,通过一个中央信息管理模块,Maven 能够管理项目的构建.报告和文档. Maven工程结构和 ...

  2. 浏览器输入URL到响应页面的全过程

    B/S网络架构从前端到后端都得到了简化,都基于统一的应用层协议HTTP来交互数据,HTTP协议采用无状态的短链接的通信方式,通常情况下,一次请求就完成了一次数据交互,通常也对应一个业务逻辑,然后这次通 ...

  3. 4.3 lambda表达式

    函数,封装的代码块可以很复杂,也可以很简单.当函数的代码块简单到只有一个表达式,就可以考虑用lambda表达式,也称匿名函数. 1 lambda表达式基础 #首先需要声明一点:lambda是表达式而非 ...

  4. HDU - 1067 Gap (bfs + hash) [kuangbin带你飞]专题二

    题意:    起初定28张卡牌的排列,把其中11,  21, 31, 41移动到第一列,然后就出现四个空白,每个空白可以用它的前面一个数的下一个数填充,例如43后面的空格可以用44填充,但是47后面即 ...

  5. C++ 监测磁盘空间

    硬盘管理器 头文件 HardDiskManager.h : #if _MSC_VER > 1000 #pragma once #endif #include <windows.h> ...

  6. 在wamp中添加php新版本

    新的公司,要求用php5.3,只记得PHP出到7了,5.3不知道是之前什么时候的了呢.不过公司要求,照办就是. 从网上看了看教程,挺简单的,就是5.3的php资源的寻找.找到了,存到了自己云盘,嘿嘿, ...

  7. linux yum源配置及vim运用

    redhat7默认没有yum模板,需要自己创建[root@localhost ~]# mount /dev/cdrom /root/iso/(挂载镜像)mount: /dev/sr0 写保护,将以只读 ...

  8. 集成电路883和883b有什么区别

    根据用途,元器件的质量等级可分为:用于元器件生产控制.选择和采购的质量等级和用于电子设备可靠性预计的质量等级两类,两者有所区别,又相互联系. 用于元器件生产控制.选择和采购的质量等级 元器件的质量等级 ...

  9. 如何利用Plxmon工具进行在线烧录PCI卡的EEPROM

    PLXMON是PLX公司提供的用于在线烧录PCI卡的EEPROM的工具. 烧录EEPROM有两种方式,一是比较传统的方法,即采用烧录机进行烧录.采用这种方式时,在调试过程中EEPROM需采用插件式封装 ...

  10. 修改windows7中文件的权限

    1.修改ntkrnlpa.exe的权限 2.鼠标右键,选择"属性" 3.单击"安全"选项,选择"高级" 4.在高级安全设置中,选择" ...