线段树模板加模板题POJ3468
整理了个新的线段树的模板,暑期集训的时候学长给的模板,每个节点单单存了自己所要维护的内容,还是少了点。导致在写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的更多相关文章
- hdu1698(线段树区间替换模板)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1698 题意: 第一行输入 t 表 t 组测试数据, 对于每组测试数据, 第一行输入一个 n , 表示 ...
- 【线段树I:母题】hdu 1166 敌兵布阵
[线段树I:母题]hdu 1166 敌兵布阵 题目链接:hdu 1166 敌兵布阵 题目大意 C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又開始忙乎了.A国在海 ...
- UESTC 1591 An easy problem A【线段树点更新裸题】
An easy problem A Time Limit: 2000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others ...
- 【CF52C】Circular RMQ(线段树区间加减,区间最值)
给定一个循环数组a0, a1, a2, …, an-1,现在对他们有两个操作: Inc(le, ri, v):表示区间[le, ri]范围的数值增加v Rmq(le, ri):表示询问区间[le, r ...
- 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 ...
- 【BZOJ 3196】二逼平衡树 线段树套splay 模板题
我写的是线段树套splay,网上很多人写的都是套treap,然而本蒟蒻并不会treap 奉上sth神犇的模板: //bzoj3196 二逼平衡树,支持修改某个点的值,查询区间第k小值,查询区间某个值排 ...
- POJ 3468:A Simple Problem with Integers(线段树区间更新模板)
A Simple Problem with Integers Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 141093 ...
- 【luogu P3372 线段树1】 模板
线段树的模板题 题目链接:https://www.luogu.org/problemnew/show/P3372 update区间修改,query区间求和 #include <iostream& ...
- 线段树(SegmentTree)基础模板
线段树模板题来源:https://www.lintcode.com/problem/segment-tree-build/description 201. 线段树的构造 /** * Definitio ...
随机推荐
- nginx之 nginx限流配置
limit_req zone=req_zone;严格依照在limti_req_zone中配置的rate来处理请求超过rate处理能力范围的,直接drop表现为对收到的请求无延时limit_req zo ...
- 【Java Web开发学习】Spring4整合thymeleaf视图解析
[Java Web开发学习]Spring4整合thymeleaf视图解析 目录 1.简单介绍2.简单例子 转载:https://www.cnblogs.com/yangchongxing/p/9111 ...
- NodeJS4-9静态资源服务器实战_发到npm上
登录->publish一下 ->上npm官网查看 -> 安装全局 //登录 npm login //推上去npm npm publish //全局安装 npm i -g 你的文件名
- 基于TCP协议之SSH
#SSH客户端 import socket # 1. 创建符合TCp协议的手机 client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # ...
- C++程序设计实验考试准备资料(2019级秋学期)
程序设计实验考试准备资料 ——傲珂 #include<bits/stdc++.h> C++常用函数: <math.h>头文件 floor() 函数原型:double floor ...
- ActiveMQ消息队列从入门到实践(4)—使用Spring JMS收发消息
Java消息服务(Java Message Service ,JMS)是一个Java标准,定义了使用消息代理的通用API .在JMS出现之前,每个消息代理都有私有的API,这就使得不同代理之间的消息代 ...
- .NET Core的JWT认证的学习
今天学习下JWT,遇到了两个坑爹问题,这里记录下.在 ASP.NET Core 中,授权的设置方式有两种,可以使用角色,也可以使用策略,这里也将简单举例角色.策略的使用. JWT这里不做介绍,如果想了 ...
- JS--- part6课程介绍 & part5复习
part6 课程介绍 scroll系列:-----重点,每个属性是什么意思 封装scroll系列的相关的属性,固定导航栏案例---事件浏览器的滚动条事件--能够写出来 封装动画函数---缓动动画--- ...
- centos6.5安装supervisor
centos6.5安装supervisor,有很多种方法,但是有很多坑,为了以后不重复踩坑,这里记录一下. 一.如果用yum install supervisor, 默认安装的是2.1.9版本,2.x ...
- 第2章:C++泛型机制的基石:数据类型表——《C++泛型:STL原理和应用》读书笔记整理
第二章:C++泛型机制的基石--数据类型表 2.1 类模板的公有数据类型成员 2.1.1 类的数据类型成员 C++类中不仅可以定义数据成员和函数成员,而且还可以定义数据类型成员.在泛型设计中,类的 ...