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

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. 105 Construct Binary Tree from Preorder and Inorder Traversal 从前序与中序遍历序列构造二叉树

    给定一棵树的前序遍历与中序遍历,依据此构造二叉树.注意:你可以假设树中没有重复的元素.例如,给出前序遍历 = [3,9,20,15,7]中序遍历 = [9,3,15,20,7]返回如下的二叉树:    ...

  2. java threadLocal的初探

    在网上找了半天,终于找到一篇靠谱的文章了. 文章地址:http://qifuguang.me/2015/09/02/[Java%E5%B9%B6%E5%8F%91%E5%8C%85%E5%AD%A6% ...

  3. MySQL数据库报错:Too many connection

    每次搭建环境运行一段时间,后台就会报错:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data sourc ...

  4. 跨平台C++开源代码的两种常用编译方式

    作者:朱金灿 来源:http://blog.csdn.net/clever101 跨平台C++开源代码为适应各种编译器的编译,采用了两种方式方面来适配.一种是makefile方式.以著名的空间数据格式 ...

  5. liunx下忘记root密码的解决方法

    1.在Liunx 刚开始重启时.我们这里按“e”键进入系统启动前的Grub配置.(注:一般要安两次e键)(如果你的系统引导程序是LILO,和Grub大体类似,请自行参照LILO给出的提示操作) 如图: ...

  6. Git .gitignore 设置为全局global

    在操作Git时,我们会将修改的内容$git add . 到Git,Git会提示我们哪些文件都修改了.此时提示中会包括系统自动修改的文件,bin文件等.而我们add到Git时,并不希望将这些文件也一同a ...

  7. LR中测试dubbo接口的脚本

    import lrapi.lr;import com.alibaba.dubbo.config.ApplicationConfig;import com.alibaba.dubbo.config.Re ...

  8. sysbench0.5安装介绍

    sysbench是一个模块化的.跨平台.多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况,sysbench支持MySQL.PostgreSQL.Oracle数据库OLTP测试.它 ...

  9. 洛谷 P2483 [SDOI2010]魔法猪学院

    题目描述 iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig对猪世界的世界本原有了很多的了解:众所周知,世界是由元素构成的:元素与 ...

  10. SAP Cloud for Customer使用移动设备访问系统的硬件要求

    如果用平板电脑的话,推荐的设备列表: Android Samsung Galaxy Tab S2○ Processor: 2 x quad-core CPU -- 1.9 and 1.3 gigahe ...