#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
#define ll long long
using namespace std;
struct node{
long long l,r,sum;
}t[10000050];
void read(ll &x)
{
int f=1;x=0;char c=getchar();
while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();}
while(c<='9'&&c>='0'){x=10*x+c-'0';c=getchar();}
x=x*f;
}
ll cnt;ll now=0;
ll n,m;
ll lazy[10000050];
void insert(ll &now,ll l1,ll r1,ll x,ll y)
{
if(now==0)
now=++cnt;//还没有节点,要新建一个
t[now].sum+=y;//这个节点表示的区间含有第x位数,所以它的值(区间和)加上第x位数也就是y
if(l1==r1)return;//已经更新到了子节点于是结束
int mid=(l1+r1)/2;//判断x在当前节点下的左子节点还是右子节点
if(x<=mid)insert(t[now].l,l1,mid,x,y);//在左子节点
else insert(t[now].r,mid+1,r
动态开点永久标记线段树的区间修改查询
最新推荐文章于 2022-04-05 21:00:50 发布
本文详细介绍了如何使用动态开点的线段树实现区间修改和查询操作。内容涵盖线段树的基本概念、动态开辟节点的方法以及在处理区间问题时的效率优化策略。通过对实例的分析和代码展示,帮助读者深入理解这一数据结构的应用。
摘要由CSDN通过智能技术生成