#include<bits/stdc++.h>
using namespace std;
int n,m,x,y,val,com,s[];
struct st{
int l,r,val,add;
}tr[];
void build(int l,int r,int k)
{
tr[k].l=l;
tr[k].r=r;
if(l==r)
{
tr[k].val=s[l];
return;
}
int mid=(l+r)>>;
build(l,mid,k<<);
build(mid+,r,k<<|);
tr[k].val = tr[k<<].val + tr[k<<|].val;
}
void pus(int k)
{
int l=tr[k].l;
int r=tr[k].r;
tr[k].add+=tr[k>>].add;
tr[k].val+=(r-l+)*tr[k>>].add;
}
void update(int x,int y,int k,int val)
{
if(tr[k].add)
{
pus(k<<);
pus(k<<|);
tr[k].add=;
}
int l=tr[k].l;
int r=tr[k].r;
int mid=(l+r)>>;
if(y<l || x>r)
return;
if(x<=l && r<=y)
{
tr[k].val += (l-r+)*val;
tr[k].add += val;
return;
}
else
{
if(x<=mid)
update(x,y,k<<,val);
if(y>mid)
update(x,y,k<<|,val);
tr[k].val = tr[k<<].val + tr[k<<|].val;
}
}
int sum(int x,int y,int k)
{
if(tr[k].add)
{
pus(k<<);
pus(k<<|);
tr[k].add=;
}
int l=tr[k].l;
int r=tr[k].r;
int mid=(l+r)>>;
if(y<l || x>r)
return ;
if(x<=l && r<=y)
return tr[k].val;
else
{
int ans=;
if(x<=mid)
ans+=sum(x,y,k<<);
if(y>mid)
ans+=sum(x,y,k<<|);
return ans;
}
}
main(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
scanf("%d",&s[i]);
build(,n,);
while(m--)
{
scanf("%d",&com);
if(com==)
{
scanf("%d%d%d",&x,&y,&val);
update(x,y,,val);
}
else
{
scanf("%d%d",&x,&y);
printf("%d\n",sum(x,y,));
}
}
}

带有lazy标记的线段树的更多相关文章

  1. HDU1698 just a Hook - 带有lazy标记的线段树

    2017-08-30 16:44:33 writer:pprp 上午刚刚复习了一下不带有lazy标记的线段树, 下午开始学带有lazy标记的线段树 这个是我看大佬代码敲的,但是出了很多问题, 这提醒我 ...

  2. HDU 1698 just a hook - 带有lazy标记的线段树(用结构体实现)

    2017-08-30 18:54:40 writer:pprp 可以跟上一篇博客做个对比, 这种实现不是很好理解,上一篇比较好理解,但是感觉有的地方不够严密 代码如下: /* @theme:segme ...

  3. 洛谷 1083 (NOIp2012) 借教室——标记永久化线段树 / 差分+二分

    题目:https://www.luogu.org/problemnew/show/P1083 听说线段树不标记永久化会T一个点. 注意mn记录的是本层以下.带上标记的min! #include< ...

  4. [HDU5306]Gorgeous Sequence(标记回收线段树)

    题意:维护一个序列,支持区间与一个数取min,询问区间最大,询问区间和(序列长度<=1e6) 分析: http://www.shuizilong.com/house/archives/hdu-5 ...

  5. [hdoj4578][多延迟标记的线段树]

    Transformation Time Limit: 15000/8000 MS (Java/Others)    Memory Limit: 65535/65536 K (Java/Others)T ...

  6. 可持久化线段树——区间更新hdu4348

    和线段树类似,每个结点也要打lazy标记 但是lazy标记和线段树不一样 具体区别在于可持久化后lazy-tag不用往下传递,而是固定在这个区间并不断累加,变成了这个区间固有的性质(有点像分块的标记了 ...

  7. NOIP2012 D2 T2 借教室 线段树 OR 二分法

    题目描述: 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借教室的信息,我们自 ...

  8. poj 3468 A Simple Problem with Integers (线段树区间更新求和lazy思想)

    A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 75541   ...

  9. Codeforces 444C 线段树 懒惰标记

    前天晚上的CF比赛div2的E题,很明显一个线段树,当时还在犹豫复杂度的问题,因为他是区间修改和区间查询,肯定是要用到懒惰标记. 然后昨天真的是给这道题跪了,写了好久好久,...我本来是写了个add标 ...

随机推荐

  1. Delphi XE2 之 FireMonkey 入门(23) - 数据绑定: TBindingsList: TBindExpression

    准备用 TBindingsList 重做上一个例子. 可以先把 TBindingsList 理解为是一组绑定表达式(TBindExpression)的集合;官方应该是提倡在设计时完成 TBindExp ...

  2. JS手写状态管理的实现(转)

    https://juejin.im/post/5c528411e51d456898361e43

  3. 多线程threading初识二--多线程等待

    .join() :子线程等待主线程 下面程序运行流程: 主线程负责启动5个子线程,把每个线程放在threads list里,然后等待所有线程等待完毕后,再执行end_time = time.time( ...

  4. Openssl ASN.1 说明一 分享

    [引言]ASN.1全称为Abstract Syntax NotationOne,是一种描述数字对象的方法和标准.openssl的编码方法就是基于该标准的,目前,很多其他软件的编码方法也是基于该标准.对 ...

  5. jQuery Ajax方法调用 Asp.Net WebService、WebMethod 的详细实例代码

    将以下html存为ws.aspx <%@ Page Language="C#" AutoEventWireup="true" %> <scri ...

  6. 第一个spring boot应用

    前提 首先要确保已经安装了java和maven: $ java -version java version "1.8.0_102" Java(TM) SE Runtime Envi ...

  7. 多线程07-Monitor.TryEnter

        );                 Console.WriteLine()))                 {                     Console.WriteLine ...

  8. Atman开发实习生的笔试题

    坐标:山东 编程题(限时30分钟)如何判断一个字符串是否为合法的IP地址.要求:1. 不能使用正则表达式和自带的库函数.2. 列出全部测试用例,并给出原因.3. 把代码的后缀名改成txt后上传,不用压 ...

  9. 使用MySQL Workbench进行数据库设计——MySQL Workbench使用方法总结

    本文出自[我是干勾鱼的博客] 转自:https://blog.csdn.net/dongdong9223/article/details/48318877 1 创建Model(设计ER图) 使用wor ...

  10. [APIO2019] 奇怪装置

    $solution:$ 问题其实就是求两个式子的循环节. 钦定 $t\mod B=0$且 $(t\neq 0)$,其 $t$ 为循环节. 则将 $1$ 式拆开得 $\frac{t\times (B+1 ...