推荐前辈学姐博客文章,写的很细

https://www.cnblogs.com/TheRoadToTheGold/p/6254255.html

学学半,此随笔主要是加深自己对线段树的理解

题目:洛谷P3374模(mu)板题

(话说为什么是树状数组,主要是因为我太菜了不会懒标记)

//代码中的位运算其实就是乘除2的一些操作#include<cstdio>
using namespace std;
int n,m,ans;
struct node {
    int left,right,num;
}tree[*+];//经典的四倍空间,我也不知道为什么
+];
void build(int index,int l,int r)//建树,一棵满二叉树
{
    tree[index].left=l,tree[index].right=r;
    if(l==r)
    {
        tree[index].num=input[l];
        return ;
    }
    ;
    build(index<<,l,mid);build(index<<|,mid+,r);
    tree[index].num=tree[index<<].num+tree[index<<|].num;
}
void add(int index,int target,int k)//单点修改,变量是序号、目标、修改值
{
    tree[index].num+=k;//对于每个可以递归到的点都是包含目标target这个点的集合,都要一并加上k
    if(tree[index].left==tree[index].right)//单点集合返回
        return ;
    ].right)
        add(index<<,target,k);
    |].left)
        add(index<<|,target,k);//两个if语句都是判断是否存在交集,是则进行下一层
}
void query(int index,int l,int r)//区间求和(区间查询)
{
    if(tree[index].right<=r&&tree[index].left>=l)
        {
            ans+=tree[index].num;//对于区间的子集累计答案
            return ;//避免累计区间子集的区间子集 ??exm
        }
    if(tree[index].right==tree[index].left)
        return ;
    ].right>=l)
        query(index<<,l,r);
    |].left<=r)
        query(index<<|,l,r);//同为寻找交集
    return ;
}
int main()
{
    scanf("%d%d",&n,&m);
    ;i<=n;i++)
        scanf("%d",input+i);
    build(,,n);//建树
    ,a,x,y;i<=m;i++)
    {
        scanf("%d%d%d",&a,&x,&y);
        )
            add(,x,y);//单点修改
        )
        {
            ans=;
            query(,x,y);//区间查询
            printf("%d\n",ans);
        }
    }  return 0;
}

等改天问一下学长们懒标记的具体

skkyk:线段树浅谈的更多相关文章

  1. P3377 【模板】左偏树(可并堆) 左偏树浅谈

    因为也是昨天刚接触左偏树,从头理解,如有不慎之处,跪请指教. 左偏树: 什 么是(fzy说)左偏树啊? 前置知识: 左偏树中dist:表示到右叶点(就是一直往右下找,最后一个)的距离,特别的,无右节点 ...

  2. 浅谈可持久化Trie与线段树的原理以及实现(带图)

    浅谈可持久化Trie与线段树的原理以及实现 引言 当我们需要保存一个数据结构不同时间的每个版本,最朴素的方法就是每个时间都创建一个独立的数据结构,单独储存. 但是这种方法不仅每次复制新的数据结构需要时 ...

  3. 【转】Senior Data Structure · 浅谈线段树(Segment Tree)

    本文章转自洛谷 原作者: _皎月半洒花 一.简介线段树 ps: _此处以询问区间和为例.实际上线段树可以处理很多符合结合律的操作.(比如说加法,a[1]+a[2]+a[3]+a[4]=(a[1]+a[ ...

  4. 数据结构3——浅谈zkw线段树

    线段树是所有数据结构中,最常用的之一.线段树的功能多样,既可以代替树状数组完成"区间和"查询,也可以完成一些所谓"动态RMQ"(可修改的区间最值问题)的操作.其 ...

  5. 浅谈线段树 (例题:[USACO08FEB]酒店Hotel)By cellur925

    今天我们说说线段树. 我个人还是非常欣赏这种数据结构的.(逃)因为它足够优美,有递归结构,有左子树和右子树,还有二分的思想. emm这个文章打算自用,就不写那些基本的操作了... 1° 简单的懒标记( ...

  6. 浅谈算法——线段树之Lazy标记

    一.前言 前面我们已经知道线段树能够进行单点修改和区间查询操作(基本线段树).那么如果需要修改的是一个区间该怎么办呢?如果是暴力修改到叶子节点,复杂度即为\(O(nlog n)\),显然是十分不优秀的 ...

  7. 浅谈树套树(线段树套平衡树)&学习笔记

    0XFF 前言 *如果本文有不好的地方,请在下方评论区提出,Qiuly感激不尽! 0X1F 这个东西有啥用? 树套树------线段树套平衡树,可以用于解决待修改区间\(K\)大的问题,当然也可以用 ...

  8. 浅谈线段树 Segment Tree

    众所周知,线段树是algo中很重要的一项! 一.简介 线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点. 使用线段树可以快速的查找某一个节点在 ...

  9. DS线段树优化最短路&&01bfs浅谈

    1简介 为什么需要?原因很简单,当需要有大量的边去连时,用线段树优化可以直接用点连向区间,或从区间连向点,或从区间连向区间,如果普通连边,复杂度是不可比拟的.下面简单讲解一下线段树(ST)优化建图. ...

随机推荐

  1. dubbo-springboot

    一.服务提供者boot-user-service-provider 服务提供者boot-user-service-provider代码结构如下: 1.服务提供者boot-user-service-pr ...

  2. 一图秒懂http与https的区别

    HTTPS与HTTP的一些区别 HTTPS协议需要到CA申请证书,一般免费证书很少,需要交费. HTTP协议运行在TCP之上,所有传输的内容都是明文,HTTPS运行在SSL/TLS之上,SSL/TLS ...

  3. 响应式Spring Cloud初探

    响应式Spring Cloud初探 分类:工程原文链接:The Road to Reactive Spring Cloud作者:  JOSH LONG译者: helloworldtang日期:JUNE ...

  4. Log4j日志框架小记

    人啊,总是在学习中发现不足,不足中学习,学习中成长. 今天来系统记录一下对于常用日志组件的理解.配置.使用. 仅供参考, 错误之处请各路好汉不吝笔墨批评指正. 转载请注明出处 Log4j日志框架是Ap ...

  5. ubuntu中wine下安装QQ

    原文:http://jingyan.baidu.com/article/359911f55da27057fe0306d8.html 可以把win改成最新版

  6. Linux用户管理-用户账号管理

    一.用户账号的增.删.改.查 1>添加用户------useradd 注:1.用户名不应是纯数字或者以数字开头 2.将登陆shell改为/sbin/nologin可禁止用户登录 格式:usera ...

  7. HTTP/1.1 持久连接 persistent connection

    首先:HTTP的长连接和短连接本质上是TCP长连接和短连接. 1. 在HTTP1.0中,默认的是短连接,没有正式规定 Connection:Keep-alive 操作:在HTTP1.1中所有连接都是K ...

  8. web前端性能优化 (share)

    本文转自:http://www.cnblogs.com/50614090/archive/2011/08/19/2145620.html 一. WEB前台的优化规则 一.尽量减少 HTTP 请求 有几 ...

  9. 包含日志文件getshell

    包含日志文件getshell     一.包含日志文件漏洞利用概述           当我们没有上传点,并且也没有url_allow_include功能时,我们就可以考虑包含服务器的日志文件.    ...

  10. COGS 2566. [51nod 1129] 字符串最大值

    ★★★   输入文件:string_maxval.in   输出文件:string_maxval.out   简单对比时间限制:1 s   内存限制:256 MB [题目描述] 一个字符串的前缀是指包 ...