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. django基础之day04,必知必会13条,双下划线查询,字段增删改查,对象的跨表查询,双下划线的跨表查询

    from django.test import TestCase # Create your tests here. import os import sys if __name__ == " ...

  2. Ansible配置批量推送公钥到被管理端

    01.yum安装ansible(推荐) sudo yum install ansible 02.配置被管理端主机IP清单 [root@ansible_50 ansible]$ cp /etc/ansi ...

  3. bsoj5988 [Achen模拟赛]期望 题解

    bsoj5988 Description [题目背景] NOI2018 已经过去了许久,2019 届的 BSOIer 们退役的退役,颓废的颓废,计数能力大不如前.曾经的数数之王 xxyj 坦言:&qu ...

  4. conda docker镜像

    之前的python环境,使用ubuntu安装pip来安装python依赖,但是遇到缺少某些库的版本,比如一个项目需要用到faiss,pip只有最新的1.5.3版本,但是这个版本使用了较新的CPU指令, ...

  5. B站上传字幕问题解决

    博客:blog.shinelee.me | 博客园 | CSDN B站上传字幕时,如果srt文件中出现如下空行,则会报错,仅上传了空行前的部分 于是写了个python脚本,如下: import pys ...

  6. C# get md5 from bytes

    static byte[] GetBytesFromDic(Dictionary<string,string> dic) { if(dic==null || !dic.Any()) { r ...

  7. 【译】gRPC vs HTTP APIs

    本文翻译自 ASP.NET Blog | gRPC vs HTTP APIs,作者 James,译者 Edison Zhou. 写在开头 现在,ASP.NET Core使开发人员可以构建gRPC服务. ...

  8. Python语法规则

    Python基本语法 Python的语法相对比C,C++,Java更加简洁,比较符合人的正常思维.本篇介绍Python的基本语法,通过本篇文章你可以学到以下内容. 掌握Python的基本语法 识别Py ...

  9. JAVA集合框架(三)-Map

    前言 Map是java中用于存储键值对映射的接口.是解决编程问题最常用的数据结构之一.在工作中,有时候为实现一个功能可能写了好大一段代码,运行是ok了,但是就是不想回头再看,不敢相信自己写的这么烂.这 ...

  10. TypeScript 参数属性

    假设类中创建的 readonly 类型的属性,该类型的属性只能在声明处或构造器中进行初始化. class Octopus { readonly name: string; readonly numbe ...