`
hellojyj
  • 浏览: 58816 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

线段树区间更新

阅读更多
void build(int r,int L,int R)
{
    if(L==R) sum[1] = 1;
    else{
        int M = (L+R)/2;
        build(r*2,L,M);
        build(r*2+1,M+1,R);
        sum[r] = sum[r*2] + sum[r*2+1];
    }
}

void push_up(int r,int L,int R)
{
    if(lazy[r]>0)
    {
        sum[r] = lazy[r]*(R-L+1);
    }
    else
    {
        sum[r] = sum[r*2] + sum[r*2+1];
    }
}

void push_down(int r)
{
    if(lazy[r]>0)
    {
        lazy[r*2] = lazy[r*2+1] = lazy[r];
        lazy[r] = 0;
    }
}

void update(int r,int L,int R,int ql,int qr,int val)
{
    if(ql<=L&&R<=qr)
    {
        lazy[r] = val;
        sum[r] = val*(R-L+1);
    }
    else
    {
        int M=(L+R)/2;
        if(ql<=M) update(r*2,L,M,ql,qr,val);
        else push_up(r*2,L,M);
        if(qr>M) update(r*2+1,M+1,R,ql,qr,val);
        else push_up(r*2+1,M+1,R);
        
        push_up(r,L,M);
    }
}

void query(int r,int L,int R,int ql,int qr)
{
    if(lazy[r]>0)
        total += lazy[r]*(min(R,qr)-max(L,ql)+1);
    else if(ql<=L&&R<=qr)
        total += sum[r];
    else
    {
        int M = (L+R)/2;
        if(ql<=M)
            query(r*2,L,M,ql,qr);
        if(qr>=M)
            quert(r*2+1,M+1,R,ql,qr);
    }
}

 

分享到:
评论

相关推荐

    线段树区间更新code

    线段树区间更新代码线段树区间更新代码线段树区间更新代码线段树区间更新代码

    pascal区间线段树

    一个讲述线段树的好资料,这里主要是程序部分,希望对广大成员能够有所帮助

    线段树模板

    线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。 使用线段树可以快速的查找某一个节点在若干条线段中出现的次数,时间复杂度为O(logN)。而未优化的...

    线段树乘法模板(从基础线段树扩展)

    线段树(Segment Tree)是一种强大的数据结构,特别适用于处理区间查询和更新问题。本资源不仅提供了线段树的基础模板,还特别包含了线段树乘法操作的实现,进一步扩展了线段树的应用范围。 核心特性: 基础与进阶...

    线段树.pdf

    线段树完全版,涉及到线段树的所有用法。 包括单点更新(增减,替换),区间求和,区间最值。 区间求最大值的位置。 成段更新(延迟标记,增减)。 离散化 扫描线

    线段树解析与经典例题.ppt

    一个线段是对应于一个区间的,因此线段树也可以叫做区间树。 线段树是一棵二叉树,树中的每一个结点表示了一个区间[a,b]。每一个叶子节点表示了一个单位区间。对于每一个非叶结点所表示的结点[a,b],其左儿子表示的...

    完整的线段树模板,基础模板

    资源描述: 线段树(Segment Tree)是一种高效且广泛应用的... 更新操作:讲解如何对线段树进行区间更新,以及如何处理更新过程中的细节问题。 源代码:提供完整的源代码示例,方便读者直接应用和学习。 学习目标

    线段树模版(比较基本的线段树以及例题模板)

    关于一些典型的线段树的例题,大家可以看一看,给一个评价,这些内容,后续我也会在博客上慢慢更新。希望大家多多的支持作者,谢谢! 这篇内容主要包含了一些我写的线段树的代码,可以帮助大家更好的理解线段树建树...

    线段树介绍

    线段树也叫区间树,顾名思义,线段树是一种基于区间的树,每个节点表示一个“线段”或“区间”。树的根节点表示是“整体”的区间,左右子树分别表示这个区间的左半边和右半边。

    线段树讲义PPT

    线段树,类似区间树,它在各个节点保存一条线段(数组中的一段子数组),主要用于高效解决连续区间的动态查询问题,由于二叉结构的特性,它基本能保持每个操作的复杂度为O(logn)。

    计算机考研机试攻略 - 满分篇.pdf

    3.2 线段树区间更新 41 3.3 线段树的应用 42 3.5 字符串匹配问题 44 3.6 图的连通性问题 45 3.7 二分图的匹配问题 46 3.8带状态压缩的搜索 47 第四章 满分之路下 47 4.1 容斥与抽屉原理 48 4.2 除法取模...

    线段树及其应用

    ACM竞赛中线段树的原理及应用。如何处理区间问题,区间快速求和求RMQ。将朴素O(n)的复杂度编程O(logn)

    线段树详解 (原理,实现与应用)

    线段树详解 (原理,实现与应用) 线段树是一棵完美二叉树,树上的每个节点都维护一个区间。根维护的是整个区间,每个节点维护的是父亲的区间二等分后的其中一个子区间。

    线段树 数据结构课程设计

    线段树 数据结构课程设计 除了初始化 插入 删除 还有统计部分 区间分解 数字查找

    线段树应用原理数据结构

    线段树拥有良好的树形二分结构,能够高效的完成这些 线段树的各种操作以及一些推广。 本文通过 3 个例子: 《蛇》 、 《空心长方体》 、 《战场 段树中基本的插入、删除、查找操作,和不规则的修改和删 的推广

    ZKW线段树模板类

    zkw线段树模板类,可动态统计区间最大值。代码略作修改即可动态统计区间和

    POJ2528-Mayor's posters【区间映射压缩(离散化)+线段树】

    POJ2528-Mayor's posters 【区间映射压缩(离散化)+线段树】 解题报告+AC代码 http://hi.csdn.net/!s/83XZJU ========&gt; 我的所有POJ解题报告链接: http://blog.csdn.net/lyy289065406/article/details/6642573

    线段树数据结构

    线段树模板,采用二叉结构储存数据。适用于区间及点的修改与查询操做。是一种灵活性较大的数据结构。

    线段树_线段树_

    线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。使用线段树可以快速的查找某一个节点在若干条线段中出现的次数,时间复杂度为O(logN)。而未优化的...

    线段树入门

    在[0,7]区间上建立一棵满二叉树:(为了和已知线段区别,用【】表示线段树中的线段) 【0,7】 / \ 【0,3】 【4,7】 / \ / \ 【0,1】 【2,3】 【4,5】 【6,7】 / \ / \ / \ / \ 【0,0】 【1,1】 【2,2】 【3,3...

Global site tag (gtag.js) - Google Analytics