这是一道模板题

线段树介绍https://www.cnblogs.com/nvwang123/p/10420832.html

 #include<bits/stdc++.h>
using namespace std;
int m,n;
int a[]; struct node{
int l,r;
long long w,f; //w是区间值,f是懒标记
}xds[*]; //4倍空间 //一、建树
void buid(int l,int r,int k){
xds[k].l=l;
xds[k].r=r;
if(l==r){
xds[k].w=a[l]; // 最底层的区间从左边开始是1,所以可以这样
return;
}
int m=(l+r)/;
buid(l,m,*k);
buid(m+,r,*k+);
xds[k].w=xds[*k].w+xds[*k+].w;//不要忘记区间和上传!!特别容易忘
} //二、懒标记下传
void down(int k){
xds[*k].w+=xds[k].f*(xds[*k].r-xds[*k].l+);
xds[*k+].w+=xds[k].f*(xds[*k+].r-xds[*k+].l+);
xds[*k].f+=xds[k].f;
xds[*k+].f+=xds[k].f;
xds[k].f=;//易漏
} //三、区间修改
void add_(int x,int y,int k,int a){
if(xds[a].l>=x&&xds[a].r<=y){
xds[a].w+=(long long)k*(xds[a].r-xds[a].l+);
xds[a].f+=k; //易漏 ,记得做懒标记
return;
}
if(xds[a].f) down(a);//!!!
int m=(xds[a].l+xds[a].r)/;
if(x<=m) add_(x,y,k,a*);
if(y>m) add_(x,y,k,a*+);
xds[a].w=xds[a*].w+xds[a*+].w;
} long long ask_(int x,int y,int k) //注意数据范围内,开int只能得70分
{
if (xds[k].l>=x&&xds[k].r<=y)
return xds[k].w; if(xds[k].f) down(k); int m=(xds[k].l+xds[k].r)/;
long long ans=;
if(x<=m) ans+=ask_(x,y,k*);
if(y>m) ans+=ask_(x,y,k*+);
return ans;
} int main(){
cin>>n>>m; for(int i=;i<=n;i++) cin>>a[i];
buid(,n,); for(int i=;i<=m;i++){
int a,x,y,k;
cin>>a;
if(a==) cin>>x>>y>>k,add_(x,y,k,);
if(a==) cin>>x>>y,cout<<ask_(x,y,)<<endl;
}
return ;
}

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

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

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

  2. 洛谷P3372线段树1

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

  3. NOIP2017提高组Day2T3 列队 洛谷P3960 线段树

    原文链接https://www.cnblogs.com/zhouzhendong/p/9265380.html 题目传送门 - 洛谷P3960 题目传送门 - LOJ#2319 题目传送门 - Vij ...

  4. 洛谷P3373线段树模板2

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

  5. 洛谷P3373 线段树2(补上注释了)

    毒瘤题.找了一下午+晚上的BUG,才发现原来query_tree写的是a%p; 真的是一个教训 UPD:2019.6.18 #include<iostream> #include<c ...

  6. 洛谷3372线段树模板题 对区间+k或者查询区间和

    #include<bits/stdc++.h> using namespace std; typedef unsigned int ui; typedef long long ll; ty ...

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

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

  8. 洛谷1087 FBI树 解题报告

    洛谷1087 FBI树 本题地址:http://www.luogu.org/problem/show?pid=1087 题目描述 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全 ...

  9. 洛谷P3018 [USACO11MAR]树装饰Tree Decoration

    洛谷P3018 [USACO11MAR]树装饰Tree Decoration树形DP 因为要求最小,我们就贪心地用每个子树中的最小cost来支付就行了 #include <bits/stdc++ ...

随机推荐

  1. windows下curl的安装和简单使用

    curl是利用URL语法在命令行方式下工作的开源文件传输工具.它支持很多协议:FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP. 一 ...

  2. redis 读写锁实现

    一 先搞清楚读写锁要做什么. 基本就是 读读不互斥,读写互斥,写写互斥.可重入. 关于redis读写锁,我写了一次之后,总觉得很怪,然后就上网看到大神的redisson了,果断借鉴一番. 二 读行为 ...

  3. 获得数据库image图片二进制

    /// <summary>        /// 获得图片二进制        /// </summary>        /// <param name="u ...

  4. Spring课程 Spring入门篇 3-3 Spring bean装配(上)之aware接口

    课程链接: 本节主要介绍了以下内容: 1 aware介绍 2 代码演练 3 课程总结 1 aware介绍 1.1 为什么要使用aware? 在java类中,可以方便的获取xml配置文件中的bean的各 ...

  5. Linux yum apt-get 方式

    Linux 大致可以分两大类   RedHat分支 redhat, centos ,mandrake,mandriva,国产的红x等 1 常见的安装包格式 rpm包,安装rpm包的命令是“rpm -参 ...

  6. 计算Sn

    求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值,其中a是一个数字. 例如:2+22+222+2222+22222(n=5), 输入 输入两个数.第一个为a ,第二个为n(表示有多少个数相加 ...

  7. Vue.js - Day4

    父组件向子组件传值 组件实例定义方式,注意:一定要使用props属性来定义父组件传递过来的数据 <script>   // 创建 Vue 实例,得到 ViewModel   var vm ...

  8. 洛谷P4925 [1007]Scarlet的字符串不可能这么可爱(计数)

    题意 题目链接 Sol 只要知道"回文连续子串"就能做了吧.. 想要满足这个条件,肯定是不能出现\(aa\)或\(aba\)这种情况 如果没有\(S\)的限制,答案为\(K * ( ...

  9. AngularJS 指令解析(一)

    AngularJS 指令解析(一) 前言 笔者AngularJS接触时间差不多是两年多,虽然这两年多AngularJS版本日新月异,但是笔者的版本是比较老的1.4.3,一方面是自己对这个版本比较熟悉, ...

  10. Java设计模式—中介者模式

    中介者模式是一种并不常用的模式,在此简单阐述阐述. 定义:用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以独立地改变它们之间的交互. 类型:行为类模式 ...