首页 > 其他分享 >懒标记线段树

懒标记线段树

时间:2024-12-05 20:21:19浏览次数:3  
标签:info qr return 标记 int 线段 tag ql

点击查看代码
// 改build ,apply ,operator + 
// 奇奇怪怪 但能用 
struct Tag{
    ll add = 0;
    void apply(Tag &t){
        add += t.add;
        return ;
    }
};

struct Info{
    ll sum = 0;
    void apply (Tag &t, int l, int r){
        sum += t.add * (r - l + 1);
        return ;
    }
};


Info operator + (const Info &a,const Info &b) {
    Info c;
    c.sum = a.sum + b.sum;
    return c;
}

struct Seg{

    int n;
    vector<Info>info;
    vector<Tag>tag;

    Seg(int n){
        info.resize(4 * n + 4);
        tag.resize(4 * n + 4);
        this -> n = n;
    }

    void down(int p, int l, int r){
        int m = (l + r) / 2;
        info[2 * p].apply(tag[p], l, m);
        info[2 * p + 1].apply(tag[p], m + 1, r);
        tag[2 * p].apply(tag[p]);
        tag[2 * p + 1].apply(tag[p]);
        tag[p] = Tag();
    }

    void merge(int p){
        info[p] = info[2 * p]+info[2 * p + 1];
    }

    void build(vector<int> & a){
        auto build = [&](auto &&self, int p, int l, int r)->void{
            if(l == r){
                info[p].sum = a[l];
                return ;
            }
            int m = (l + r) / 2;
            self(self, 2 * p, l, m);
            self(self, 2 * p + 1, m + 1, r);
            merge(p);
        };
        build(build, 1, 1, n);
    }

    Info query(int p, int l, int r, int ql, int qr){
        if(ql > r || qr < l)return Info();
        if(ql <= l && qr >= r){
            return info[p];
        }
        down(p, l, r);
        merge(p);
        int m = (l + r ) / 2;    
        return query(2 * p, l, m, ql, qr) + query(2 * p + 1, m + 1, r, ql, qr);
    }

    void modify(int p, int l, int r, int ql, int qr, int w){
        if(ql > r || qr < l)return ;
        if(ql <= l && qr >= r){
            info[p].sum += (r - l + 1) * w;
            tag[p].add += w;
            return ;
        }
        int m = (l + r) / 2;
        down(p, l, r);
        modify(2 * p, l, m, ql, qr, w);
        modify(2 * p + 1, m + 1, r, ql, qr, w);
        merge(p);
    }
};

标签:info,qr,return,标记,int,线段,tag,ql
From: https://www.cnblogs.com/YijieWang/p/18589342

相关文章

  • 数据执行保护(DEP,Data Execution Prevention) 是一种安全机制,旨在防止恶意代码在计算机
    数据执行保护(DEP,DataExecutionPrevention)是一种安全机制,旨在防止恶意代码在计算机的特定内存区域执行。它通过标记某些内存区域为“不可执行”,从而阻止攻击者在这些区域注入并执行恶意代码。DEP的工作原理DEP的基本思想是,操作系统通过对内存区域的权限控制,防止程序在某些特......
  • 洛谷题单指南-线段树-P6492 [COCI2010-2011#6] STEP
    原题链接:https://www.luogu.com.cn/problem/P6492题意解读:一个序列,初始L,可以指定一个位置修改,L修改成R,R修改成L,可以令L=0,R=1,然后每次修改后输出序列最长不连续0、1(0/1交替出现)的长度。解题思路:序列支持单点修改(0->1,1->0),区间查询(最长不连续0、1长度),因此可以采用线段树,不需要懒标......
  • 洛谷题单指南-线段树-P1471 方差
    原题链接:https://www.luogu.com.cn/problem/P1471题意解读:给定序列a[n],支持三种操作:1.将区间每个数加上一个数2.查询区间的平均数3、查询区间的方差解题思路:要支持区间修改和查询,首选线段树,下面看线段树节点需要维护的信息平均数=区间和/n,所以第一个要维护的信息是区间和......
  • 线段树维护最大子段和及其类似问题
    引入link。我们可以分析出上题就是带修改的最大子段和。遇到这种类型的题目应该想到用线段树。实现对于原数列,先建起一棵线段树,每个节点包含最大前缀、最大后缀、最大字段和、区间和信息。当你明确一道题是线段树时,要先思考pushup和pushdown怎么写,因为剩下的都是差不......
  • 微信小程序3-显标记信息和弹框
     感谢阅读,初学小白,有错指正。一、实现功能:在地图上添加标记点后,标记点是可以携带以下基础信息的,如标题、id、经纬度等。但是对于开发来说,这些信息还不足够,而且还要做到点击标记点时,能够显示出相关所有信息。这篇笔记就是分享点击一个已有图标,如何能够显示出相关信息的功能。......
  • 目前最全的新能源汽车充电口识别,可识别特斯拉,ccs1,ccs2,ChadeMo,Type1,Type2等多种类型插
    目前最全的新能源汽车充电口识别,可识别特斯拉,ccs1,ccs2,ChadeMo,Type1,Type2等多种类型插口,支持YOLO,COCO,VOC三种标记,精确到91.1%数据集介绍:数据集一共3348图像 训练组67%        2244图片有效集10%        337图片测试集23%        7......
  • 黑客基础之html(超文本标记语言)
    声明!学习视频来自B站up主泷羽sec有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关,切勿触碰法律底线,否则后果自负!!!!有兴趣的小伙伴可以点击下面连接进入b站主页泷羽sec的......
  • 动态开点线段树
    概况背景线段树,作为一种高级数据结构,其时间复杂度十分优秀。但有一个问题,就是需要的空间非常大,比如,现在给你一个长度为1e9的数组,让你在上面建立线段树。这种情况下连数组都开不了,更何况需要四倍空间的线段树呢。动态开点线段树就在这样的情况下出现了。思路顾名思义,动态开点......
  • 平衡性能与隐私:解读Google的服务器端标记
    在当前数字化时代,企业需要深入洞察用户行为,以提高网站转化率。然而,随着用户对隐私保护的期待日益提高以及相关法规的收紧,如何兼顾性能与隐私成为了一大挑战。为了解决这一问题,Google推出了服务器端标记(Server-SideTagging)技术。什么是服务器端标记?服务器端标记是GoogleTag......
  • 第三方Cookie的消亡与Google服务器端标记的崛起
    随着互联网用户对隐私保护的关注日益增强,各大浏览器正在逐步淘汰第三方Cookie。这一变革深刻影响了广告商和数字营销人员的用户跟踪和数据分析方式。然而,Google推出的服务器端标记技术为这一挑战提供了新的解决方案。什么是第三方Cookie?第三方Cookie是由您访问的网站以外的......