首页 > 其他分享 >线段树结构体模板

线段树结构体模板

时间:2024-05-26 15:15:53浏览次数:20  
标签:树结构 int 线段 tree lson rson sum 模板 mod

线段树是一种维护区间和等功能的数据结构

struct SegTree{
	struct node{
		int l,r,sum,len,laz;
	}tree[N<<2];
	inline void pushdown(int u){
		int lson=u<<1,rson=lson|1;
		tree[lson].laz+=tree[u].laz;
		tree[rson].laz+=tree[u].laz;
		tree[lson].sum+=tree[lson].len*tree[u].laz;
		tree[rson].sum+=tree[rson].len*tree[u].laz;
		tree[lson].sum%=mod;
		tree[rson].sum%=mod;
		tree[u].laz=0; 
	}
	void build(int u,int l,int r,int w[]){
		tree[u].l=l,tree[u].r=r,tree[u].len=r-l+1,tree[u].sum=tree[u].laz=0;
		if(l==r){
			tree[u].sum=w[u];
			if(tree[u].sum>=mod)tree[u].sum%=mod;
			return;
		}
		int mid=(l+r)>>1,lson=u<<1,rson=lson|1;
		build(lson,l,mid,w);
		build(rson,mid+1,r,w);
		tree[u].sum=(tree[lson].sum+tree[rson].sum)%mod;
	}
	void update(int u,int l,int r,int k){
		if(l<=tree[u].l&&tree[u].r<=r){
			tree[u].laz+=k;
			tree[u].sum+=k*tree[u].len;
		}
		else{
			if(tree[u].laz)pushdown(u);
			int mid=(tree[u].l+tree[u].r)>>1,lson=u<<1,rson=lson|1;
			if(l<=mid)update(lson,l,r,k);
			if(r>mid)update(rson,l,r,k);
			tree[u].sum=(tree[lson].sum+tree[rson].sum)%mod;
		}
	}
	int query(int u,int l,int r){
		if(l<=tree[u].l && r<=tree[u].r){
			return tree[u].sum;
		}
		else{
			int res=0,mid=(tree[u].l+tree[u].r)>>1,lson=u<<1,rson=lson|1;
			if(tree[u].laz)pushdown(u);
			if(l<=mid)res=(res+query(lson,l,r))%mod;
			if(r>mid)res=(res+query(rson,l,r))%mod;
		}
	}
}tr;

标签:树结构,int,线段,tree,lson,rson,sum,模板,mod
From: https://www.cnblogs.com/wanxue/p/18213690

相关文章

  • 【知识点】深入浅出STL标准模板库
    前几天谈论了许多关于数论和数据结构的东西,这些内容可能对初学者而言比较晦涩难懂(毕竟是属于初高等算法/数据结构的范畴了)。今天打算来讲一些简单的内容-STL标准模板库。STL标准模板库C++标准模板库(StandardTemplateLibrary,STL),是C++语言非常重要的一个构成部分......
  • 一个模板元函数来检查一个类是否有一个特定的成员
    通过创建一个模板元函数来检查一个类是否有一个特定的成员。以下是一个例子:#include<type_traits>template<typenameT,typename=void>structhas_type_member:std::false_type{};template<typenameT>structhas_type_member<T,std::void_t<typenameT::typ......
  • 『C++初阶』第四章--- 模板初级
    1.泛型编程    如何实现一个适合于所有类型的通用的交换函数呢?voidSwap(int&left,int&right){inttemp=left;left=right;right=temp;}voidSwap(double&left,double&right){doubletemp=left;left=right;right=temp;}voidSwap(ch......
  • gin框架模板渲染
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录gin框架模板渲染自定义模板函数静态文件处理gin框架模板渲染这个目录的路径要放正确(虽然我也不知道为什么突然就解决了)==错误模板====正确版本==packagemainimport( "net/http"......
  • 线段树维护区间字符的两道例题(CF240F CF558E)
    CF240F:https://www.luogu.com.cn/problem/CF240F题目大意:给定一个长为n的由a到z组成的字符串,有m次操作,每次操作将[l,r]的字符串进行重排,得到字典序最小的字符串,输出m次操作后的字符串。大致思路:1.首先我们要想区间内的字典序最小的回文串要怎么构造。回文串无非就两种类型:有一......
  • 【知识点】浅入线段树与区间最值问题
    前言:这又是一篇关于数据结构的文章。今天来讲一下线段树和线段树的基本应用。线段树(SegmentTree),是一种非常高效且高级的数据结构,其主要用于区间查询和与区间更新相关的问题,例如进行多次查询区间最大值、最小值、更新区间等操作。区间最值问题引入常见的线段树题型就是区......
  • Django模板层之模板语法
    1.变量变量输出语法{{var}}当模版引擎遇到一个变量,将计算这个变量,然后将结果输出变量名必须由字母、数字、下划线(不能以下划线开头)和点组成当模版引擎遇到点("."),会按照下列顺序查询:字典查询,例如:foo["bar"]属性或方法查询,例如:foo.bar数字索引查询,例如:foo[bar]如......
  • 网页设计模板网站 HTML5网站模板
    在当今数字化时代,网页设计已成为企业和个人展示其品牌形象、分享内容以及与用户互动的重要渠道。为了满足不同用户的需求,HTML5网站模板应运而生,为网页设计师和开发者提供了强大而灵活的基础框架。成品网站模板:https://www.yunbuluo.net/pbootcms(已发布500多款)HTML网页模板:ht......
  • 网页设计模板网站 公司网站设计制作
    网页设计模板网站助力公司网站设计制作,在数字化高速发展的今天,拥有一个专业、美观、功能齐全的公司网站对于企业的形象塑造和业务拓展至关重要。然而,对于许多中小企业来说,缺乏专业的网页设计团队和预算限制成为了阻碍其建立高质量网站的难题。这时,网页设计模板网站的出现为公......
  • 如何设计公司网站网页模板
    在数字化时代,一个专业的公司网站是企业形象和业务推广的重要平台。一个设计精良的网站模板不仅能够吸引访问者,还能有效地传达公司信息,提升用户体验,设计公司网站网页模板是一个需要综合考虑用户体验、品牌形象、功能性和可维护性的过程。以下是一篇关于如何设计公司网站网页模板......