结构体是个好东西。。。

看着逼格很高

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<algorithm>
#define l(x) (x<<1)
#define r(x) ((x<<1)|1)
#define ll long long
using namespace std; struct Treenode{int l,r;ll tag,val;};
struct Segtree
{
Treenode tr[*];
void pushup(int id){tr[id].val=tr[l(id)].val+tr[r(id)].val;}
void pushdown(int id)
{
tr[l(id)].val+=tr[id].tag*(tr[l(id)].r-tr[l(id)].l+);
tr[r(id)].val+=tr[id].tag*(tr[r(id)].r-tr[r(id)].l+);
tr[l(id)].tag+=tr[id].tag;tr[r(id)].tag+=tr[id].tag;
tr[id].tag=;
}
void build(int id,int L,int R)
{
tr[id].l=L,tr[id].r=R;
tr[id].tag=;
if(L==R)
{
scanf("%lld",&tr[id].val);
return;
}
int mid=(L+R)>>;
build(l(id),L,mid);
build(r(id),mid+,R);
pushup(id);
}
void update(int id,int L,int R,ll k)
{
if(tr[id].l>=L && tr[id].r<=R)
{
tr[id].val+=k*(tr[id].r-tr[id].l+);
tr[id].tag+=k;
return;
}
if(tr[id].tag)pushdown(id);
int mid=(tr[id].l+tr[id].r)>>;
if(L<=mid)update(l(id),L,R,k);
if(R>mid) update(r(id),L,R,k);
pushup(id);
}
ll query(int id,int L,int R)
{
if(tr[id].l>=L && tr[id].r<=R)return tr[id].val;
if(tr[id].tag)pushdown(id);
int mid=(tr[id].l+tr[id].r)>>;
ll ans=;
if(L<=mid)ans+=query(l(id),L,R);
if(R>mid)ans+=query(r(id),L,R);
return ans;
}
}Seg; int main()
{
int n,m;
scanf("%d%d",&n,&m);
Seg.build(,,n);
while(m--)
{
int opt,x,y,k;
scanf("%d",&opt);
if(opt==)
{
scanf("%d%d%d",&x,&y,&k);
Seg.update(,x,y,k);
}
if(opt==)
{
scanf("%d%d",&x,&y);
printf("%lld\n",Seg.query(,x,y));
}
}
}

线段树Final版本的更多相关文章

  1. 可持久化线段树的学习(区间第k大和查询历史版本的数据)(杭电多校赛第二场1011)

    以前我们学习了线段树可以知道,线段树的每一个节点都储存的是一段区间,所以线段树可以做简单的区间查询,更改等简单的操作. 而后面再做有些题目,就可能会碰到一种回退的操作.这里的回退是指回到未做各种操作之 ...

  2. Codeforces Round #393 (Div. 2) (8VC Venture Cup 2017 - Final Round Div. 2 Edition) E - Nikita and stack 线段树好题

    http://codeforces.com/contest/760/problem/E 题目大意:现在对栈有m个操作,但是顺序是乱的,现在每输入一个操作要求你输出当前的栈顶, 注意,已有操作要按它们的 ...

  3. 2015 UESTC 数据结构专题D题 秋实大哥与战争 变化版本的线段树,合并区间,单点查询

    D - 秋实大哥与战争 Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/59 D ...

  4. HDU 4348.To the moon SPOJ - TTM To the moon -可持久化线段树(带修改在线区间更新(增减)、区间求和、查询历史版本、回退到历史版本、延时标记不下放(空间优化))

    To the moon Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  5. ZKW线段树 非递归版本的线段树

    学习和参考 下面是支持区间修改和区间查询的zkw线段树模板,先记下来. #include <algorithm> #include <iterator> #include &l ...

  6. PYOJ 44. 【HNSDFZ2016 #6】可持久化线段树

    #44. [HNSDFZ2016 #6]可持久化线段树 统计 描述 提交 自定义测试 题目描述 现有一序列 AA.您需要写一棵可持久化线段树,以实现如下操作: A v p x:对于版本v的序列,给 A ...

  7. Codeforces558E A Simple Task(线段树)

    题目 Source http://codeforces.com/problemset/problem/558/E Description This task is very simple. Given ...

  8. zkw线段树详解

    转载自:http://blog.csdn.net/qq_18455665/article/details/50989113 前言 首先说说出处: 清华大学 张昆玮(zkw) - ppt <统计的 ...

  9. 【BZOJ-4653】区间 线段树 + 排序 + 离散化

    4653: [Noi2016]区间 Time Limit: 60 Sec  Memory Limit: 256 MBSubmit: 107  Solved: 70[Submit][Status][Di ...

随机推荐

  1. Mac Python建立简单的本地服务器

    由于Mac自带Python 所以省去我们去下载了 打开终端  执行python stm-macmini:~ apple$ pythonPython 2.7.10 (default, Jul 14 20 ...

  2. PHP中foreach用法详细讲解

    1.foreach是什么? foreach是PHP的一种语法结构,其实就是一个工具,(工具:就是工作的时候用到的器具),那么在程序开发过程中,为了达到程序效果,就用到了foreach. 2.如何用? ...

  3. Python小白的发展之路之Python基础(三)【函数简介】

    目录: 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 4.嵌套函数 5.递归 6.匿名函数 7.函数式编程介绍 8.高阶函数 9.内置函数 1. 函数基本语法及特性 首先我们明确函数是 ...

  4. 基于jquery的bootstrap在线文本编辑器插件Summernote (转)

    Summernote是一个基于jquery的bootstrap超级简单WYSIWYG在线编辑器.Summernote非常的轻量级,大小只有30KB,支持Safari,Chrome,Firefox.Op ...

  5. 【BZOJ3105】[cqoi2013]新Nim游戏 贪心+线性基

    [BZOJ3105][cqoi2013]新Nim游戏 Description 传统的Nim游戏是这样的:有一些火柴堆,每堆都有若干根火柴(不同堆的火柴数量可以不同).两个游戏者轮流操作,每次可以选一个 ...

  6. [原创]使用vscode+es6写nodejs服务端调试配置

    前端的小伙伴们在babel等的加持下,已经可以愉快的使用es6来写代码了. 然后对于服务端的nodejs就有点坑爹了,虽然原生支持了es6,但是只是部分支持,一些不支持的特性(比如module)使用了 ...

  7. bash批量去前缀

    #!/bin/sh for aFile in *; do oldfile=`basename "$aFile"` newfile=${oldfile::} echo ${oldfi ...

  8. java操作文件流对象

    所有流对象 InputStream 字节流         FileInputStream 字节流 专门读写非文本文件的         BufferedInputStream 高效流 OutPutS ...

  9. centos7 运行postgres 数据库脚本db.sql

    [root@localhost ~]# su postgresbash-4.2$ psqlcould not change directory to "/root": Permis ...

  10. MyBaits面试题

    原文地址 Mybatis技术内幕系列博客,从原理和源码角度,介绍了其内部实现细节,无论是写的好与不好,我确实是用心写了,由于并不是介绍如何使用Mybatis的文章,所以,一些参数使用细节略掉了,我们的 ...