线段树的模板题

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

update区间修改,query区间求和

 #include <iostream>
#include <cstdio>
#include <algorithm>
#define ll long long
#define lson left, mid, rt<<1
#define rson mid+1, right, rt<<1|1
using namespace std;
const int maxn = ;
ll n, m, ans[maxn<<],lazy[maxn<<],tot=,re[maxn<<];
void PushUP(ll rt)
{
ans[rt] = ans[rt<<] + ans[rt<<|];
}
void build(ll left, ll right, ll rt)
{
if(left == right)
{
cin>>ans[rt];
return;
}
ll mid = (left + right)>>;
build(lson);
build(rson);
PushUP(rt);
} void PushDOWN(ll rt, ll mid, ll left, ll right)
{
if(lazy[rt])
{
lazy[rt<<]+=lazy[rt];
lazy[rt<<|]+=lazy[rt];
ans[rt<<]+=(mid-left+)*lazy[rt];
ans[rt<<|]+=(right-mid)*lazy[rt];
lazy[rt]=;
}
}
ll query(ll l, ll r, ll left, ll right, ll rt)
{
ll res = ;
if(l<=left&&r>=right)
{
return ans[rt];
}
ll mid = (left + right)>>;
PushDOWN(rt,mid,left,right);
if(l<=mid) res += query(l,r,lson);
if(r>mid) res += query(l,r,rson);
return res;
}
void update(ll l, ll r, ll add, ll left, ll right, ll rt)
{
if(l<=left&&r>=right)
{
lazy[rt]+=add;
ans[rt]+=add*(right-left+);
return;
}
ll mid = (left+right)>>;
PushDOWN(rt,mid,left,right);
if(l<=mid) update(l,r,add,lson);
if(r>mid) update(l,r,add,rson);
PushUP(rt);
} int main()
{
cin.sync_with_stdio(false);
cin>>n>>m;
ll p,x,y,k;
build(,n,);
while(m--)
{
cin>>p;
if(p==)
{
cin>>x>>y>>k; update(x,y,k,,n,);
}
if(p==)
{
tot++;
cin>>x>>y; cout<<query(x,y,,n,);
}
}
return ;
}

【luogu P3372 线段树1】 模板的更多相关文章

  1. [线段树]Luogu P3372 线段树 1【模板】

    #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #d ...

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

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

  3. 线段树--线段树【模板1】P3372

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

  4. BZOJ-1036 树的统计Count 链剖线段树(模板)=(树链剖分+线段树)

    潇爷昨天刚刚讲完...感觉得还可以...对着模板打了个模板...还是不喜欢用指针.... 1036: [ZJOI2008]树的统计Count Time Limit: 10 Sec Memory Lim ...

  5. 【原创】线段树query模板对比! 新手线段树的一个容易出错的问题!!因为我就糊涂了一整天.......

    我们解决问题的最好方法就是拿实例来举例子 我们来看tyvj1038或计蒜客 “管家的忠诚” 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记k次账,由于管 ...

  6. Zeratul的完美区间(线段树||RMQ模板题)

    原题大意:原题链接 给定元素无重复数组,查询给定区间内元素是否连续 解体思路:由于无重复元素,所以如果区间内元素连续,则该区间内的最大值和最小值之差应该等于区间长度(r-l) 解法一:线段树(模板题) ...

  7. 洛谷 P3372 线段树1

    这是一道模板题 线段树介绍https://www.cnblogs.com/nvwang123/p/10420832.html #include<bits/stdc++.h> using n ...

  8. 矩形面积并-扫描线 线段树 离散化 模板-poj1151 hdu1542

    今天刚看到这个模板我是懵逼的,这个线段树既没有建树,也没有查询,只有一个update,而且区间成段更新也没有lazy标记....研究了一下午,我突然我发现我以前根本不懂扫描线,之所以没有lazy标记, ...

  9. 洛谷P3372线段树1

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

随机推荐

  1. java url生成二维码保存到本地

    http://blog.sina.com.cn/s/blog_5a6efa330102v1lb.html http://blog.csdn.net/about58238/article/details ...

  2. C#博客记录二

    1.认识运算符 我认为其中 最重要的就是逻辑运算符,对于每个人来说学习web前端就是要有一个好的思维.能够更好的运用. 2.算数运算符 变量名++意味先输出,值后增加. ++变量名意味值先增加,后输出 ...

  3. 6、Modal

    1.首先Modal是一个内容窗格.通常用来做一个选择或编辑. 先来看一下 tabs.html 做了什么. /* --- tabs.html ----*/ <ion-navbar *navbar ...

  4. node.js分片上传文件

    前端 : <html> <head> <title>分片上传文件</title> </head> <body> <div ...

  5. 不同线程不能获取其他线程设置的ThreadLocal里面的值

    背景: 最近在项目用到了ThreadLocal,存放一些值.起线程异步获取ThreadLocal中的值,得到null.这是由于,ThreadLocal.get()会获取当前线程的一个map对象,以Th ...

  6. mac的svn

    http://xclient.info/s/cornerstone.html?t=c5242a66e53f1d866afe8c42aace2738c04ce9ee#versions 破解版的地址 打开 ...

  7. sublime text 3 添加代码片段

    工具>插件开发>新建代码片段 <snippet> <content> <![CDATA[ Hello, ${1:this} is a ${2:snippet} ...

  8. Android Activity中状态保存机制

    在Activity中保存用户的当前操作状态,如输入框中的文本,一般情况下载按了home键后,重新进入文本框中的东西会丢下,所以我们要保存当前页面信息,如在写短信的时候接到一个电话,那么当你接电话的时候 ...

  9. html网页访问WebAPI中的方法遇到的问题

      1.移动端访问远程服务时,建议使用WebAPI 2.用不同浏览器访问WebAPI时返回的文本格式是不同的,Chrome Firefox将在浏览器中以XML形式显示此列表,IE浏览器将获得Json格 ...

  10. CSS3嵌入字体

    @font-face能够加载服务器端的字体文件,让浏览器端可以显示用户电脑里没有安装的字体.语法: 例子: