POJ - 3468

整理了个新的线段树的模板,暑期集训的时候学长给的模板,每个节点单单存了自己所要维护的内容,还是少了点。导致在写pushdown的时候,len我会有点难写。所以就整理个新的模板。

每个节点还存了l,r,lazy,len,写起来思路清晰多了。

#include<iostream>
#include<cstdio>
#define lson (rt << 1)
#define rson (rt << 1 | 1)
#define Lson lson, l, mid
#define Rson rson, mid + 1, r
typedef long long ll;
const int INF=0x3f3f3f3f;
const int maxn=1e5+;
using namespace std;
struct node
{
ll val;//值
int len;//长度
ll lazy;//标记
int l,r;//左右端点
}tree[maxn<<]; ll arr[maxn]; int n,m; void build(int rt,int l,int r) //建树
{
tree[rt].lazy=;
tree[rt].l=l;tree[rt].r=r;
tree[rt].len=r-l+;
if (l==r) tree[rt].val=arr[l];//到达树端点,给val赋值
else
{
int mid=(l+r)/;
build(Lson);
build(Rson);
tree[rt].val=tree[lson].val+tree[rson].val;
}
} void pushdown(int rt) //向下传递lazy标记
{
if (tree[rt].lazy)
{
tree[lson].lazy+=tree[rt].lazy;
tree[rson].lazy+=tree[rt].lazy;
tree[lson].val+=tree[lson].len*tree[rt].lazy;
tree[rson].val+=tree[rson].len*tree[rt].lazy;
tree[rt].lazy=;
}
} void add(int rt,int id,ll addval) //单点更新
{
if (tree[rt].l==tree[rt].r)
{
tree[rt].val+=addval;
return;
}
else
{
int mid=(tree[rt].l+tree[rt].r)/;
if (id<=mid) add(lson,id,addval);
else add(rson,id,addval);
tree[rt].val=tree[lson].val+tree[rson].val;
}
} ll query(int rt,int l,int r) //计算区间和
{
if (tree[rt].l>=l&&tree[rt].r<=r)
return tree[rt].val;
if (tree[rt].l>r||tree[rt].r<l)
return ;
pushdown(rt);
return query(lson,l,r)+query(rson,l,r);
} void update(int rt,int l,int r,ll addval) //区间更新
{
ll mid;
if (tree[rt].l>=l&&tree[rt].r<=r)
{
tree[rt].lazy+=addval;
tree[rt].val+=tree[rt].len*addval;
return;
}
if (tree[rt].l>r||tree[rt].r<l)
return;
pushdown(rt);
update(lson,l,r,addval);
update(rson,l,r,addval);
tree[rt].val=tree[lson].val+tree[rson].val;
}
int main()
{
scanf("%d%d",&n,&m);
for (int i=;i<=n;i++)
{
scanf("%lld",&arr[i]);
}
build(,,n);
for (int i=;i<=m;i++)
{
char s[];
scanf("%s",s);
int l,r;
ll x;
if (s[]=='C')
{ scanf("%d%d%lld",&l,&r,&x);
update(,l,r,x);
}
else
{
scanf("%d%d",&l,&r);
printf("%lld\n",query(,l,r));
}
}
return ;
}

线段树模板加模板题POJ3468的更多相关文章

  1. hdu1698(线段树区间替换模板)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1698 题意: 第一行输入 t 表 t 组测试数据, 对于每组测试数据, 第一行输入一个 n , 表示 ...

  2. 【线段树I:母题】hdu 1166 敌兵布阵

    [线段树I:母题]hdu 1166 敌兵布阵 题目链接:hdu 1166 敌兵布阵 题目大意 C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又開始忙乎了.A国在海 ...

  3. UESTC 1591 An easy problem A【线段树点更新裸题】

    An easy problem A Time Limit: 2000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others ...

  4. 【CF52C】Circular RMQ(线段树区间加减,区间最值)

    给定一个循环数组a0, a1, a2, …, an-1,现在对他们有两个操作: Inc(le, ri, v):表示区间[le, ri]范围的数值增加v Rmq(le, ri):表示询问区间[le, r ...

  5. poj 3468 A Simple Problem with Integers 线段树区间加,区间查询和(模板)

    A Simple Problem with Integers Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://poj.org/problem?i ...

  6. 【BZOJ 3196】二逼平衡树 线段树套splay 模板题

    我写的是线段树套splay,网上很多人写的都是套treap,然而本蒟蒻并不会treap 奉上sth神犇的模板: //bzoj3196 二逼平衡树,支持修改某个点的值,查询区间第k小值,查询区间某个值排 ...

  7. POJ 3468:A Simple Problem with Integers(线段树区间更新模板)

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

  8. 【luogu P3372 线段树1】 模板

    线段树的模板题 题目链接:https://www.luogu.org/problemnew/show/P3372 update区间修改,query区间求和 #include <iostream& ...

  9. 线段树(SegmentTree)基础模板

    线段树模板题来源:https://www.lintcode.com/problem/segment-tree-build/description 201. 线段树的构造 /** * Definitio ...

随机推荐

  1. 解决oracle11g数据库监听连接不上问题

    java连接数据库报错12514,无法识别监听,但是PL客户端可以连接 oracle 监听 添加ip 同时修改tnsnames.ora.listener.ora将这两个文件中HOST后面的主机都修改为 ...

  2. 通过url返回的状态来抢注好的用户名

    之前在注册很多网站时都想取一个好的用户名,但是不知道那些被注册了没有,通常时一个一个测试,但是很慢当时就想过这个思路,由于懒并没有去搞 主要思路就是:很多网站的用户主页的Url都存在用户名,替换为自己 ...

  3. GoLand相同目录(包)下方法调用

    之前写的python,摸索go的时候发现相同目录下写的方法调用,在编译时竟然会报错,Mark~ 相同目录下方法调用,main.go文件调用tool.go中的add方法,要点如下: 1.两个文件的pak ...

  4. 【ES6】函数的扩展

    1.函数参数默认值[详情例子参照ESMAScript 6入门 (阮一峰)] 允许为函数的参数设置默认值,即直接写在参数定义的后面.[例子1] 参数变量是默认声明的,所以不能用let或const再次声明 ...

  5. java8-date和timeAPI

    一 我们为什么要学习 java.timeAPI 原先的Date and Calendar 类的api比较复杂,不易于理解,应用起来不是很灵活. Calendar 是个线程不安全的类会导致SimpleD ...

  6. 《Java基础知识》Java多态对象的类型转换

    这里所说的对象类型转换,是指存在继承关系的对象,不是任意类型的对象.当对不存在继承关系的对象进行强制类型转换时,java 运行时将抛出 java.lang.ClassCastException 异常. ...

  7. Python基础知识第八篇(集合)

    #集合是无序的#集合是不同元素组成的#集合是不可变的,列如:列表,字典,元组#创建空集合 s=set() # s={1,2,3,4,2} # print(s) #集合添加>>>> ...

  8. Internet History,Technology,and Security -Technology: Application Protocols(Week7)

    Week7 Technology: Application Protocols This week, we’ll be covering application protocols. With rel ...

  9. iOS核心动画高级技巧 - 6

    11. 基于定时器的动画 基于定时器的动画 我可以指导你,但是你必须按照我说的做. -- 骇客帝国 在第10章“缓冲”中,我们研究了CAMediaTimingFunction,它是一个通过控制动画缓冲 ...

  10. VMware Workstation 15 Pro中安装ubuntu1804

    这篇笔记是一篇安装教程,没有什么实际的意义,仅为了记录一下……距离上次弄这东西不知道多长时间了,以至于这次再次使用时很是生疏,于是就想着把过程记录下来方便之后查看. 这里不涉及VMware Works ...