题目:https://www.luogu.org/problemnew/show/P3372

线段树模板。

代码如下:

#include<iostream>
#include<cstdio>
using namespace std;
long long n,m,a[100005],ct;
struct N{
long long lazy,sum;
long long ls,rs;
}p[200005];
void pushdown(long long cur,long long l,long long r)
{
long long mid=(l+r)/2;
long long lson=p[cur].ls,rson=p[cur].rs;
p[lson].lazy+=p[cur].lazy;
p[rson].lazy+=p[cur].lazy;
p[lson].sum+=p[cur].lazy*(mid-l+1);
p[rson].sum+=p[cur].lazy*(r-mid);
p[cur].lazy=0;
}
void pushup(long long cur)
{
long long lson=p[cur].ls,rson=p[cur].rs;
p[cur].sum=p[lson].sum+p[rson].sum;
}
void build(long long l,long long r,long long cur)
{
if(l==r)
{
p[cur].sum=a[l];
p[cur].ls=-1;p[cur].rs=-1;
return;
}
long long mid=(l+r)/2;
p[cur].ls=++ct;p[cur].rs=++ct;
build(l,mid,p[cur].ls);build(mid+1,r,p[cur].rs);
pushup(cur);
}
void add(long long l,long long r,long long L,long long R,long long c,long long cur)
{
if(l>=L&&r<=R)
{
p[cur].lazy+=c;
p[cur].sum+=c*(r-l+1);
return;
}
pushdown(cur,l,r);//
long long mid=(l+r)/2;
if(mid<R)add(mid+1,r,L,R,c,p[cur].rs);
if(mid>=L)add(l,mid,L,R,c,p[cur].ls);
pushup(cur);//
}
long long query(long long l,long long r,long long L,long long R,long long cur)
{
long long tot=0;
if(l>=L&&r<=R)
return p[cur].sum;
long long mid=(l+r)/2;
pushdown(cur,l,r);
if(mid<R)tot+=query(mid+1,r,L,R,p[cur].rs);
if(mid>=L)tot+=query(l,mid,L,R,p[cur].ls);
return tot;
}
int main()
{
scanf("%lld%lld",&n,&m);
for(long long i=1;i<=n;i++)
scanf("%lld",&a[i]);
long long rt=++ct;
build(1,n,rt);
long long d,x,y,k;
for(long long i=1;i<=m;i++)
{
scanf("%d",&d);
if(d==1)
{
scanf("%lld%lld%lld",&x,&y,&k);
add(1,n,x,y,k,rt);
}
if(d==2)
{
scanf("%lld%lld",&x,&y);
printf("%lld\n",query(1,n,x,y,rt));
}
}
return 0;
}

  

洛谷P3372线段树模板1——线段树的更多相关文章

  1. 【原创】洛谷 LUOGU P3373 【模板】线段树2

    P3373 [模板]线段树 2 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.将某区间每一个数乘上x 3.求出某区间每一个数的和 输入输出格式 输入格式: 第 ...

  2. 洛谷 P3373:【模板】线段树 2(区间更新)

    题目描述 如题,已知一个数列,你需要进行下面三种操作: 1.将某区间每一个数乘上x 2.将某区间每一个数加上x 3.求出某区间每一个数的和 输入输出格式 输入格式: 第一行包含三个整数N.M.P,分别 ...

  3. [洛谷P3701]「伪模板」主席树

    题目大意:太暴力了,就不写了,看这儿 题解:对于每个$byx$的人,从源点向人连边,容量为此人的寿命. 对于每个手气君的人,从人向汇点连边,容量为此人的寿命. 对于每个$byx$的人与手气君的人,如果 ...

  4. 洛谷P3372/poj3468(线段树lazy_tag)(询问区间和,支持区间修改)

    洛谷P3372 //线段树 询问区间和,支持区间修改 #include <cstdio> using namespace std; struct treetype { int l,r; l ...

  5. 【洛谷P3369】【模板】普通平衡树题解

    [洛谷P3369][模板]普通平衡树题解 题目链接 题意: 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除一个)3 ...

  6. 洛谷P3372 【模板】线段树 1

    P3372 [模板]线段树 1 153通过 525提交 题目提供者HansBug 标签 难度普及+/提高 提交  讨论  题解 最新讨论 [模板]线段树1(AAAAAAAAA- [模板]线段树1 洛谷 ...

  7. 洛谷 P3372 【模板】线段树 1

    P3372 [模板]线段树 1 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.求出某区间每一个数的和 输入输出格式 输入格式: 第一行包含两个整数N.M,分别 ...

  8. 洛谷—— P3372 【模板】线段树 1

    P3372 [模板]线段树 1 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.求出某区间每一个数的和 输入输出格式 输入格式: 第一行包含两个整数N.M,分别 ...

  9. 线段树入门详解,洛谷P3372 【模板】线段树 1

    关于线段树: 本随笔参考例题      P3372 [模板]线段树 1 所谓线段树就是把一串数组拆分成一个一个线段形成的一棵树. 比如说像这样的一个数组1,2,3,4,5: 1 ~ 5 /       ...

随机推荐

  1. 开发及应用中 Linux与Window 取舍

    Linux是开源的,而Windows不是.这个也是Linux与Windows之间最大的差异.一般来说,开源似乎收到了更多系统管理员的亲睐,而开源的软件似乎更受个人电脑用户的欢迎.两种类型之间有很多不同 ...

  2. npm 全局配置放在c盘/用户/当前用户/目录下

    prefix=D:\Users\Ed\AppData\Roaming\nodejs\npm-globalcache=D:\Users\Ed\AppData\Roaming\npm-cacheregis ...

  3. 基于EasyNVR二次开发实现业务需求:直接集成EasyNVR播放页面到自身项目

    EasyNVR着重点是立足于视频能力层,但是自身也是可以作为一个产品使用的.这就更加方便了应用层的使用. 由于业务需求的缘故,无法使用实体项目展示. 案例描述 该业务系统是国内某大型显示屏生产企业内部 ...

  4. 使用AXIS2作为Client訪问WebService

    使用AXIS2,能够方便的构建WebService的server端,也能够非常方便的作为Cilent,来訪问别的WebService. 以下依据工作中的经历,整理了一下,作为Cilent訪问WebSe ...

  5. POJ 2442 Sequence【堆】

    题目链接:http://poj.org/problem?id=2442 题目大意:给出一个m*n的矩阵,从每一行中取出一个数相加.能得到n^m个不同的结果.要求输出当中前n项. 建立一个以n元数组为底 ...

  6. Linux就该这么学--命令集合11(配置系统相关信息)

    1.配置主机名称: 查看主机名: hostname 修改主机名: vim /etc/hostname 2.配置网卡信息: 在红帽RHEL6系统中网卡配置文件的前缀为“ifcfg-eth”,第一块即为“ ...

  7. JAVA Exception处理

    原文地址:http://blog.csdn.net/hguisu/article/details/6155636 1. 引子 try…catch…finally恐怕是大家再熟悉不过的语句了,而且感觉用 ...

  8. 【zabbix】微信告警消息模版

    下面给出了一个zabbix微信告警消息的模版, 消息最后加上#号和短横线的设计有两个原因: 1,zabbix的微信告警消息总是被截断,比如最后一个告警时间,如果没有最后一行#号,在微信上看的时候时间不 ...

  9. PAT 甲级 1007. Maximum Subsequence Sum (25) 【最大子串和】

    题目链接 https://www.patest.cn/contests/pat-a-practise/1007 思路 最大子列和 就是 一直往后加 如果 sum < 0 就重置为 0 然后每次 ...

  10. 关于LCD的duty与bias

    关于LCD的duty与bias 关于LCD的duty与bias duty: 占空比将所有公共电极(COM)各施加一次扫描电压的时间叫一帧,单位时间内扫描多少帧的频率叫帧频,将扫描公共电极(COM)选通 ...