#include<bits/stdc++.h>
using namespace std;
typedef unsigned int ui;
typedef long long ll;
typedef unsigned long long ull;
#define pf printf
#define mem(a,b) memset(a,b,sizeof(a))
#define prime1 1e9+7
#define prime2 1e9+9
#define pi 3.14159265
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
#define scand(x) scanf("%llf",&x)
#define f(i,a,b) for(int i=a;i<=b;i++)
#define scan(a) scanf("%d",&a)
#define dbg(args) cout<<#args<<":"<<args<<endl;
#define pb(i) push_back(i)
#define ppb(x) pop_back(x)
#define inf 0x3f3f3f3f
#define maxn 100005
int n,m,t;
ll sum[maxn<<],add[maxn<<];
void pushup(int rt)//上拉
{
sum[rt]=sum[rt<<]+sum[rt<<|];
}
void build(int l,int r,int rt)
{
if(l==r)
{
scanf("%lld",&sum[rt]);
return ;
}
int mid=l+r>>;
build(lson);
build(rson);
pushup(rt);//上拉,维护区间和
}
void pushdown(int rt,int ln,int rn)//lazy tag下推
{
if(add[rt])
{
add[rt<<]+=add[rt];//+=表示该段原先可能就有没有下推的lazy tag
add[rt<<|]+=add[rt]; sum[rt<<]+=add[rt]*ln;//一旦lazy tag加到这段区间上就代表区间的sum是准确更新过的
sum[rt<<|]+=add[rt]*rn;
add[rt]=;//lazytag完成转移
}
}
void update(int l,int r,int rt,int L,int R,ll C)
{
if(L<=l&&r<=R)
{
add[rt]+=C;//tag到达之处维护的值也相对应的更新
sum[rt]+=C*(r-l+);
return;
}
int mid=l+r>>;
//在更新子结点之前下推标记,保证更新直到最终结点之前的结点lazytag全部下推
pushdown(rt,mid-l+,r-mid);
if(L<=mid) update(lson,L,R,C);
if(R>mid) update(rson,L,R,C);
pushup(rt);//更新完子节点之后在更新父节点整个update才结束
}
ll query(int l,int r,int rt,int L,int R)
{
if(L<=l&&r<=R)
{
return sum[rt];
}
int mid=l+r>>;
pushdown(rt,mid-l+,r-mid);
ll ans=;
if(L<=mid) ans+=query(lson,L,R);
if(R>mid) ans+=query(rson,L,R);
return ans;
}
int main()
{
//freopen("P3372_2.txt","r",stdin);
//freopen("output.txt","w",stdout);
std::ios::sync_with_stdio(false);
scan(n);scan(m);
build(,n,);
int flag,l,r;
ll k;
while(m--)
{
scan(flag);
if(flag==)
{
scanf("%d%d%lld",&l,&r,&k);
update(,n,,l,r,k);
}
else if(flag==)
{
scan(l);scan(r);
pf("%lld\n",query(,n,,l,r));
}
}
}

洛谷3372线段树模板题 对区间+k或者查询区间和的更多相关文章

  1. 洛谷P3372线段树模板1——线段树

    题目:https://www.luogu.org/problemnew/show/P3372 线段树模板. 代码如下: #include<iostream> #include<cst ...

  2. 洛谷P3373线段树模板2

    题目:https://www.luogu.org/problemnew/show/P3373 带乘的线段树,更新时把加的标记也乘一下,然后取值时先乘后加. 代码如下: #include<iost ...

  3. [AHOI 2009] 维护序列(线段树模板题)

    1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec  Memory Limit: 64 MB Description 老师交给小可可一个维护数列的任务,现在小 ...

  4. hdu1823(二维线段树模板题)

    hdu1823 题意 单点更新,求二维区间最值. 分析 二维线段树模板题. 二维线段树实际上就是树套树,即每个结点都要再建一颗线段树,维护对应的信息. 一般一维线段树是切割某一可变区间直到满足所要查询 ...

  5. [POJ2104] 区间第k大数 [区间第k大数,可持久化线段树模板题]

    可持久化线段树模板题. #include <iostream> #include <algorithm> #include <cstdio> #include &l ...

  6. HDU 1698 Just a Hook (线段树模板题-区间求和)

    Just a Hook In the game of DotA, Pudge’s meat hook is actually the most horrible thing for most of t ...

  7. UESTC - 1057 秋实大哥与花 线段树模板题

    http://acm.uestc.edu.cn/#/problem/show/1057 题意:给你n个数,q次操作,每次在l,r上加上x并输出此区间的sum 题解:线段树模板, #define _CR ...

  8. 洛谷P3372线段树1

    难以平复鸡冻的心情,虽然可能在大佬眼里这是水题,但对蒟蒻的我来说这是个巨大的突破(谢谢我最亲爱的lp陪我写完,给我力量).网上关于线段树的题解都很玄学,包括李煜东的<算法竞赛进阶指南>中的 ...

  9. POJ - 3264 线段树模板题 询问区间最大最小值

    这是线段树的一个模板题,给出一串数字,然后询问区间的最大最小值. 这个其实很好办,只需把线段树的节点给出两个权值,一个是区间的最小值,一个是区间的最大值,初始化为负无穷和正无穷,然后通过不断地输入节点 ...

随机推荐

  1. react和vue

    react整体的思路就是函数式,所以推崇纯组件,数据不可变,单向数据流,当然需要双向的地方也可以做到,比如结合redux-form,而vue是基于可变数据的,支持双向绑定.react组件的扩展一般是通 ...

  2. css 控制li点与文字的距离

    ul>li 默认的样式如下 前面的点与文字是有间距的 可见,通过设置 text-indent 属性可以调整li点与文字的距离

  3. PHP RFI 的小tip

    有关PHP include的帖子网上已经很多了,wooyun的知识库里面也有一篇总结的很好的文章,传送门:http://drops.wooyun.org/tips/3827,今晚在看书的时候看到RFI ...

  4. 安卓权威编程指南-笔记(第23章 HTTP与后台任务)

    1. 网络连接基本 //通过指定URL获取原始数据,并返回一个字节流数组. public byte[] getUrlBytes(String urlSpec)throws IOException{ / ...

  5. Roma - Facebook工具链大一统

    什么是roma roma,中文名罗马,是Facebook的rn团队的产出,是一个试验性质的javascript工具链,集编译,linter,格式化,打包,测试等等于一体.目标是成为一个处理javasc ...

  6. 一文了解各大图数据库查询语言(Gremlin vs Cypher vs nGQL)| 操作入门篇

    文章的开头我们先来看下什么是图数据库,根据维基百科的定义:图数据库是使用图结构进行语义查询的数据库,它使用节点.边和属性来表示和存储数据. 虽然和关系型数据库存储的结构不同(关系型数据库为表结构,图数 ...

  7. 从String到==和hashcode

    public static void main(String[] args) { String s1 = "ni"; String s2 = "hao"; St ...

  8. 微信小程序注册和简单配置

    微信小程序注册 1.直接搜索微信小程序,按照流程进行注册 2.如果有微信公众号,可以在公众号内部点小程序,进入注册流程 小程序中的概念 开发设置 在开发设置中获取AppID和AppSecret App ...

  9. url参数格式化

    getQueryBbj = (url)=>{ let urlData = url.split("?")[1]; let queryArr = urlData.split('& ...

  10. vue+webpack怎么分环境进行打包

    这里说下,webpack打包里面涉及到的东西,不止webpack,还有node的知识, node的全局变量process,process.env用于返回用户环境信息对象,因为是node的全局变量,所以 ...