#include<iostream>
#include<algorithm>
#include<stdio.h>
using namespace std;
#define Lson rt<<1
#define Rson rt<<1|1
//这里写的和学长不一样,我遵从是叶子结点的四倍定义数组,学长定义的是 1e5+5<<1,
const int Maxn=1e5+;
struct node
{
int mid, len, L, R;
__int64 e, sum;
} a[Maxn<<];//第一次提交runtime了,我发现是数组开小了,我发现我定义的是叶子结点的二倍,粗心了。
//不过还是基础知识不牢固,毕竟我只是记住了结论,但不知从何而推来。
__int64 x; void Buildsegtree(int rt, int L, int R);//建立
void pushdown(int rt);//下推
__int64 Query(int rt, int L, int R);//查询
void Update(int rt, int L, int R, int e);//更新 int main()
{
int n, m, a, b, c;
scanf("%d%d", &n, &m);
Buildsegtree(, , n);
while(m--)
{
char s[];
scanf("%s", s);
if(s[]=='Q')
{
scanf("%d%d", &a, &b);
printf("%I64d\n", Query(, a, b));
}
else
{
scanf("%d%d%d", &a, &b, &c);
Update(, a, b, c);
}
}
return ;
}
void Buildsegtree(int rt, int L, int R)//建立
{
a[rt].L=L;
a[rt].R=R;
a[rt].e=;//这点没写,之后核对的时候才发现
a[rt].mid=(L+R)>>;
a[rt].len=(R-L)+;//我吧if语句写在了这些赋值语句之前,不知道可以不,
//反正改了过来,不过我觉得写前面后面都一样,毕竟它的叶子节点没有左孩子和有孩子了
//之后把他俩换了换位置发现不行
if(L==R)
{
scanf("%I64d", &x);
a[rt].sum=x;
return;
}
Buildsegtree(Lson, L, a[rt].mid);
Buildsegtree(Rson, a[rt].mid+, R);
a[rt].sum=a[Lson].sum+a[Rson].sum;
} void pushdown(int rt)//下推
{
a[Lson].sum+=a[rt].e*a[Lson].len;
a[Lson].e+=a[rt].e;
a[Rson].sum+=a[rt].e*a[Rson].len;
a[Rson].e+=a[rt].e;
a[rt].e=;
}
__int64 Query(int rt, int L, int R)
{
if(a[rt].L==L&&a[rt].R==R)
{
return a[rt].sum;
} pushdown(rt); if(R<=a[rt].mid)
Query(Lson, L, R);
else if(L>a[rt].mid)
Query(Rson, L, R);
else
{
__int64 Lsum=Query(Lson, L, a[rt].mid);
__int64 Rsum=Query(Rson, a[rt].mid+, R); return Lsum+Rsum;
}
}
void Update(int rt, int L, int R, int e)
{
//少写了这一步
a[rt].sum+=(R-L+)*e;
if(a[rt].L==L&&a[rt].R==R)
{
a[rt].e+=e;
return;
} pushdown(rt); if(R<=a[rt].mid)
Update(Lson, L, R, e);
else if(L>a[rt].mid)
Update(Rson, L, R, e);
else
{
Update(Lson, L, a[rt].mid, e);
Update(Rson, a[rt].mid+, R, e);
}
}

poj 3468 线段树模板题的更多相关文章

  1. POJ 3468 线段树裸题

    这些天一直在看线段树,因为临近期末,所以看得断断续续,弄得有些知识点没能理解得很透切,但我也知道不能钻牛角尖,所以配合着刷题来加深理解. 然后,这是线段树裸题,而且是最简单的区间增加与查询,我参考了A ...

  2. POJ - 3264 线段树模板题 询问区间最大最小值

    这是线段树的一个模板题,给出一串数字,然后询问区间的最大最小值. 这个其实很好办,只需把线段树的节点给出两个权值,一个是区间的最小值,一个是区间的最大值,初始化为负无穷和正无穷,然后通过不断地输入节点 ...

  3. [AHOI 2009] 维护序列(线段树模板题)

    1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec  Memory Limit: 64 MB Description 老师交给小可可一个维护数列的任务,现在小 ...

  4. hdu1823(二维线段树模板题)

    hdu1823 题意 单点更新,求二维区间最值. 分析 二维线段树模板题. 二维线段树实际上就是树套树,即每个结点都要再建一颗线段树,维护对应的信息. 一般一维线段树是切割某一可变区间直到满足所要查询 ...

  5. [POJ2104] 区间第k大数 [区间第k大数,可持久化线段树模板题]

    可持久化线段树模板题. #include <iostream> #include <algorithm> #include <cstdio> #include &l ...

  6. HDU 1698 Just a Hook (线段树模板题-区间求和)

    Just a Hook In the game of DotA, Pudge’s meat hook is actually the most horrible thing for most of t ...

  7. UESTC - 1057 秋实大哥与花 线段树模板题

    http://acm.uestc.edu.cn/#/problem/show/1057 题意:给你n个数,q次操作,每次在l,r上加上x并输出此区间的sum 题解:线段树模板, #define _CR ...

  8. POJ - 3468 线段树单点查询,单点修改区间查询,区间修改模板(求和)

    题意: 给定一个数字n,表示这段区间的总长度.然后输入n个数,然后输入q,然后输入a,b,表示查询a,b,区间和,或者输入c 再输入三个数字a,b,c,更改a,b区间为c 思路: 线段树首先就是递归建 ...

  9. poj 3468(线段树)

    http://poj.org/problem?id=3468 题意:给n个数字,从A1 …………An m次命令,Q是查询,查询a到b的区间和,c是更新,从a到b每个值都增加x.思路:这是一个很明显的线 ...

随机推荐

  1. centos7 笔记本盒盖不睡眠

    cd /etc/systemd vi logind.conf 动作包括:HandlePowerKey:按下电源键后的动作HandleSleepKey:按下挂起键后的动作HandleHibernateK ...

  2. Python:简述 线程、进程和协程

    Python线程 定义:Threading用于提供线程相关的操作,线程是应用程序中工作的最小单元. #!/usr/bin/env python # -*- coding:utf-8 -*- impor ...

  3. Laravel5.1 数据库--DB运行原生SQL

    Laravel操作数据库有三种:DB原生SQL.构建器.Model.这三种依情况而决定使用哪种更合适. 那么今儿咱就从DB原生SQL说起: 1 用DB门面原生SQL语句操作 用DB门面操作的话呢 无非 ...

  4. 第10章 Docker Machine 相关问题

    10.1 打开命令行后,看到下载啥 boot2docker.iso,然后总是超时失败,怎么办? 装了 Docker Toolbox 的 Windows 用户,或者第一次使用 docker-machin ...

  5. 【网络优化|渣速必看】合理设置MTU,提升网络速度

    可能很少网友注意过“本机.网络”的“MTU”值对自己网络性能产生的影响.对于追求更快的下载速度来说,MTU值设置不当,就仿佛穿着高跟鞋跑步一般. MTU是什么? “MTU=最大传输单元 单位:字节” ...

  6. 45、Android事件总线分发库的使用

    事件总线分发库EventBus和Otto的简介及对比 什么是事件总线管理: a.将事件放到队列里,用于管理和分发b.保证应用的各个部分之间高效的通信及数据.事件分发c.模块间解耦 Event Bus是 ...

  7. java 对list 排序

    Comparable用Collections.sort方法对list排序有两种方法第一种是list中的对象实现Comparable接口,如下: /*** 根据order对User排序*/public  ...

  8. Web开发之容器

    Web开发之容器 主题 Servlet容器.Web容器.应用服务器 参考资料   Servlet容器.Web容器.应用服务器         Servlet容器的主要任务是管理Servlet的生命周期 ...

  9. 1*SUM(i) 开源社区

    w 算法优化 Cells(i, "Y") + Cells(i, "Z") * 0.2 多计算了一次是 1*SUM(i)次 Sub 订单利润() Dim Adju ...

  10. 人工智能-基于百度baidu-ai和图灵机器人实现学说话机器人

    本文引用了2个js文件,这里提供下CDN资源,! <script type="application/javascript" src="https://cdn.bo ...