首页 > 其他分享 >SGT 进阶(?

SGT 进阶(?

时间:2024-09-06 22:24:34浏览次数:10  
标签:进阶 int sum SGT tag inline rson

动态开点

当正常堆式建树开不下时(\(n\) 或 \(V\) 过大),通常使用动态开点。

例题

P2781 传教

算是很板了吧?

每次修改的时候,若当前访问节点未建立则新建节点并回溯至上一个节点记录左右儿子。实测写 & 引用或 struct 是很方便的。

十分注意的是在 work 函数(单点修改 & 标记下放)里面一定要判断当前访问节点是否建立

SGT namespace 代码:

namespace SGT {
	#define mid (L + R) >> 1
	#define son p, L, R
	#define lson ls[p], L, (L + R) >> 1
	#define rson rs[p], ((L + R) >> 1) + 1, R
	
	int tot, ls[N], rs[N], tag[N], sum[N];
	
	inline void psup(int p) {sum[p] = sum[ls[p]] + sum[rs[p]];}
	
	inline void work(int &p, int L, int R, int k) {
		if(!p) p = ++ tot;
		
		tag[p] += k;
		sum[p] += k * (R - L + 1);
	}
	
	inline void psd(int p, int L, int R) {
		work(lson, tag[p]), work(rson, tag[p]);
		
		tag[p] = 0;
	}
	
	inline void add(int l, int r, int k, int &p, int L = 1, int R = n)  {
		if(! p) p = ++ tot;
		
		if(l <= L && R <= r) {
			work(son, k);
			return;
		}
		
		psd(son);
		
		if(l <= mid) add(l, r, k, lson);
		if(r > mid) add(l, r, k, rson);
		
		psup(p);
	}
	
	inline int query(int l, int r, int &p, int L = 1, int R = n) {
		int res = 0;
		
		if(! p) return 0;
		
		if(l <= L && R <= r) return sum[p];
		
		psd(son);
		
		if(l <= mid) res += query(l, r, lson);
		if(r > mid) res += query(l, r, rson);
		
		return res;
	}
}

标签:进阶,int,sum,SGT,tag,inline,rson
From: https://www.cnblogs.com/endswitch/p/18401170

相关文章

  • Grafana进阶教程:使用Loki、Tempo进行日志与追踪可视化
    Grafana进阶教程:使用Loki、Tempo进行日志与追踪可视化在现代运维和开发环境中,日志和追踪是观测系统健康状态、分析问题和优化性能的重要手段。Grafana是一款广泛使用的开源数据可视化和监控平台,它支持与多种数据源的集成,能够提供灵活和强大的仪表板功能。Loki和Tempo......
  • AngularJS进阶(十五)Cookie ‘data‘ possibly not set or overflowed because it was
    Cookie ‘data’ possibly not set or overflowedbecause it was too large (5287 > 4096 bytes)!注:请点击此处进行充电!故事起源项目开发过程中遇到以上问题,刚开始以为只是个警告,没太在意。后来发现直接影响到了程序的执行效果。果断寻找解决方法。问题......
  • 第七.八.九天---RSA进阶题型
    还是先复习,没有连续更新的原因是因为有一天满课,有一个家里有事情没有心情弄,不说了,好好干吧!T31--扩展欧几里得一.题目:fromCrypto.Util.numberimport*flag=b'******'m1=bytes_to_long(flag[:len(flag)//2])m2=bytes_to_long(flag[len(flag)//2:])assert18608629......
  • 武汉黑马进阶班第五天
    正则表达式&&泛型&&Collection集合1.正则表达式String方法.matches(规范格式)2.用在方法里面(是由一串特殊字符组成的字符串)不需要去记,上网查都是能够查到的2.泛型<>---里面可以是四类八种包装类,也可以是String,也可以是自定义对象注意:Student类中需要规范JavaBean接口先定义......
  • Datawhale X 李宏毅苹果书 AI夏令营(进阶Task03)
    批量归一化为什么不同的参数在更新时其梯度变化如此之大?首先,对于模型中w1,w2两个参数,可以看到其w1参数的梯度变化较为平滑,w2梯度变化较为陡峭,原因是x1较小时,当w1变化较大,由于x1较小,其整体乘积较小,对损失值影响不大;x2较大时,w2发生变化,其乘积较大,其对损失值变化很大,影响较大。......
  • 【时时三省】(C语言基础)指针进阶 例题
    山不在高,有仙则名。水不在深,有龙则灵。            ----CSDN时时三省字符数组例题: arr后面放了六个字符所以这个数组的元素个数就是6第一个arr因为他计算的是一整个数组的大小就是打印6第二个arr+0arr没有单独放在它的内部所以它计算的就......
  • 【时时三省】(C语言基础)指针进阶6
    山不在高,有仙则名。水不在深,有龙则灵。             ----CSDN时时三省例题1: sizeof(数组名)-数组名表示整个数组的-计算的是整个数组的大小&数组名-数组名表示整个数组,取出的是整个数组的地址除此之外,所有的数组名都是数组首元素的地址第一个a......
  • IM项目:进阶版即时通讯项目---项目总览
    文章目录写在前面相关文档相关架构网关服务用户管理好友管理文件管理消息管理转发管理语音转换写在前面之前用Qt已经完成过一个即时通讯的项目,具体如下:Qt项目:C++全栈聊天项目总结在这个项目的引导下,接触到了如何使用grpc协议来进行RPC调用,之后又对于项目进行了一......
  • MySQL-高级进阶篇
    本篇是将基础篇的知识进行深化了解底层机制的同时讲解企业中涉及到的高层级知识。Linux安装MYSQL存储引擎1、MySQL体系结构连接层最上层是一些客户端和链接服务,主要完成一些类似于连接处理、授权认证、及相关的安全方案。服务器也会为安全接入的每个客户端验证它所具有的......
  • 【技术详解】Java泛型:全面解析与实战应用(进阶版)
    文章目录Java泛型:全面解析与实战应用1.引言1.1什么是Java泛型?1.2泛型的历史背景1.3泛型的重要性与优势2.泛型的基本概念2.1类型参数2.2泛型类2.3泛型方法2.4泛型接口2.5泛型擦除3.创建和使用泛型类3.1定义一个简单的泛型类3.2使用泛型类3.3泛型类的类型......