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. nginx之 nginx限流配置

    limit_req zone=req_zone;严格依照在limti_req_zone中配置的rate来处理请求超过rate处理能力范围的,直接drop表现为对收到的请求无延时limit_req zo ...

  2. 【Java Web开发学习】Spring4整合thymeleaf视图解析

    [Java Web开发学习]Spring4整合thymeleaf视图解析 目录 1.简单介绍2.简单例子 转载:https://www.cnblogs.com/yangchongxing/p/9111 ...

  3. NodeJS4-9静态资源服务器实战_发到npm上

    登录->publish一下 ->上npm官网查看 -> 安装全局 //登录 npm login //推上去npm npm publish //全局安装 npm i -g 你的文件名

  4. 基于TCP协议之SSH

    #SSH客户端 import socket # 1. 创建符合TCp协议的手机 client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # ...

  5. C++程序设计实验考试准备资料(2019级秋学期)

    程序设计实验考试准备资料 ——傲珂 #include<bits/stdc++.h> C++常用函数: <math.h>头文件 floor() 函数原型:double floor ...

  6. ActiveMQ消息队列从入门到实践(4)—使用Spring JMS收发消息

    Java消息服务(Java Message Service ,JMS)是一个Java标准,定义了使用消息代理的通用API .在JMS出现之前,每个消息代理都有私有的API,这就使得不同代理之间的消息代 ...

  7. .NET Core的JWT认证的学习

    今天学习下JWT,遇到了两个坑爹问题,这里记录下.在 ASP.NET Core 中,授权的设置方式有两种,可以使用角色,也可以使用策略,这里也将简单举例角色.策略的使用. JWT这里不做介绍,如果想了 ...

  8. JS--- part6课程介绍 & part5复习

    part6 课程介绍 scroll系列:-----重点,每个属性是什么意思 封装scroll系列的相关的属性,固定导航栏案例---事件浏览器的滚动条事件--能够写出来 封装动画函数---缓动动画--- ...

  9. centos6.5安装supervisor

    centos6.5安装supervisor,有很多种方法,但是有很多坑,为了以后不重复踩坑,这里记录一下. 一.如果用yum install supervisor, 默认安装的是2.1.9版本,2.x ...

  10. 第2章:C++泛型机制的基石:数据类型表——《C++泛型:STL原理和应用》读书笔记整理

    第二章:C++泛型机制的基石--数据类型表 2.1 类模板的公有数据类型成员 2.1.1 类的数据类型成员   C++类中不仅可以定义数据成员和函数成员,而且还可以定义数据类型成员.在泛型设计中,类的 ...