算法模板-线段树

线段树

模板

(P3372 【模板】线段树 1)https://www.luogu.com.cn/problem/P3372

cpp 复制代码
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<cstring>
typedef long long ll;
using namespace std;
const int N=100010;
struct node{
	int l,r;
	ll sum,add;
}tr[N*4];
int n,m;
int w[N];

void pushup(int u){
	tr[u].sum=tr[u<<1].sum+tr[u<<1|1].sum;
}

void pushdown(int u){
	node &root=tr[u],&left=tr[u<<1],&right=tr[u<<1|1];
	if (root.add){
		left.add+=root.add; left.sum+=(ll)(left.r-left.l+1)*root.add;
		right.add+=root.add; right.sum+=(ll)(right.r-right.l+1)*root.add;
		root.add=0;
	}
}
void modify(int u,int l,int r,int d){
	if (tr[u].l>=l&&tr[u].r<=r) {
		tr[u].sum+=(ll)(tr[u].r-tr[u].l+1)*d;
		tr[u].add+=d;
	}
	else {
		pushdown(u);
		int mid=tr[u].l+tr[u].r>>1;
		if (l<=mid) modify(u<<1,l,r,d);
		if (r>mid) modify(u<<1|1,l,r,d);
		pushup(u);
		
	}
}
void build (int u,int l,int r){
	if (l==r) tr[u]={l,r,w[r],0};
	else{
		tr[u]={l,r};
		int mid=l+r>>1;
		build (u<<1,l,mid);
		build (u<<1|1,mid+1,r);
		pushup(u);
	}
}
ll query(int u,int l,int r){
	if (tr[u].l>=l&&tr[u].r<=r) return tr[u].sum;
	pushdown(u);
	int mid=tr[u].l+tr[u].r>>1;
	ll sum=0;
	if (l<=mid )sum+=query(u<<1,l,r);
	if (r>mid) sum+=query(u<<1|1,l,r);
	return sum;
}

int main(){
	cin>>n>>m;
	for (int i=1;i<=n;i++){
		cin>>w[i];
	}
	build (1,1,n);
	for (int i=1;i<=m;i++){
		int a,b,c,d;
		cin>>a>>b>>c;
		if (a==1){
			cin>>d;
			modify(1,b,c,d);
		}
		else{
			cout<<query(1,b,c)<<endl;
		}
			
	}
	return 0;
}
相关推荐
汉克老师10 分钟前
GESP2026年9月认证C++六级( 第三部分编程题(2、分树规划))精讲
c++·gesp·小学生·学c++编程
学生小羊17 分钟前
C++ 初阶 学习博客
c语言·c++·c++与c语言的区别·c++基础学习
虚无的纽扣21 分钟前
【力扣刷题】第三天:有效三角形的个数、快乐数
算法·排序算法
tiger86525 分钟前
大语言模型面试和题解,Context Engineering 怎么做?长 Prompt、动态上下文与 Memory 管理
人工智能·深度学习·算法·语言模型·自然语言处理·面试·nlp
辛苦才能1 小时前
C++多态原理:虚函数表的内存布局与动态绑定的汇编真相
开发语言·c++
西西弗Sisyphus1 小时前
Qt 实现一个 水波进度球
c++·qt·c
无忧.芙桃1 小时前
数据结构之排序算法(中):冒泡排序与快速排序,从相邻交换到工程级优化
c语言·c++·排序算法
不会就选b1 小时前
算法日常・每日刷题--<贪心>17
算法
Hhy_11071 小时前
《C++深度解构04》类和对象(下)——类型转换、static、友元与编译器优化
c语言·c++·学习·类和对象·visual studio
qq_199886872 小时前
第7板块·第1节:通用算子分类与设计模式
c++·人工智能·gpu算力·cuda