Process 我觉得线段树的精华就在于他的懒标记,懒标记之所以懒,是因为他只做到你让他输出的这一步节点,而不会彻底的更新树(举个例子:给[3,6]加上1,那么因为懒标记的存在,他会给代表[3,6]的节点加上4个1,但是其实并不会给3、4、5、6分别加1,只有下次你要用到这几个节点的时候他才会一并加上)。 以上...
void build(int l, int r, int & rt) {//递归建树rt = ++tot;tr[rt].l = l, tr[rt].r = r;if (l == r) {scanf("%lld", &tr[rt].v);return;}int mid = (l + r) >> 1;build(l, mid, tr[rt].lc);build(mid + 1, r, tr[rt].rc);push_up(tr[rt].lc, tr[rt].rc...
build(1,1,n); while(m--) { scanf("%lld",&a1); if(a1==1) { scanf("%lld%lld%lld",&b,&c,&d); update(b,c,1,n,1,d); } if(a1==2) { scanf("%lld%lld",&e,&f); printf("%lld\n",query(e,f,1,n,1)); } } return0; } 线段树2: 1 2 3 4 5 6 7 8 9 10 ...
for(int i=bel[l]+1;i<bel[r];i++) res+=sum[i]+mark[i]*size[i]; } return res; } int main(void){ int x,y,id,z; scanf("%d%d",&n,&m); init(n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int i=1;i<=sq;i++) for(int j=st[i];j<=ed[i];j++)...
【模板】线段树 1 代码语言:javascript 复制 #include<bits/stdc++.h>using namespace std;#define ll long longconstint maxn=100005;int a[maxn];structN{int l,r;ll pre,add;}node[4*maxn+5];voidbuild(int p,int l,int r){//区间编号pnode[p].l=l;node[p].r=r;if(l==r){//叶子结点...
算法c 1/5 创建者:给太阳一个微笑2019 收藏 C02【模板】线段树+懒标记 Luogu P3372 线段树——信息学竞赛算法 2.1万播放 [蓝桥杯]真题讲解:整数删除(暴力、链表与优先队列) 9724播放 F06 字典树(Trie)——信息学竞赛算法 2.0万播放 [熟肉]10分钟讲解20个系统设计概念 3.1万播放 杭电ACM刘老师-算法入门培训...
1.将某区间每一个数加上x 2.求出某区间每一个数的和 输入输出格式 输入格式: 第一行包含两个整数N、M,分别表示该数列数字的个数和操作的总个数。 第二行包含N个用空格分隔的整数,其中第i个数字表示数列第i项的初始值。 接下来M行每行包含3或4个整数,表示一个操作,具体如下: 操作1: 格式:1 x y...
洛谷P3372 【模板】线段树 1 传送门 思路# 前几天学了线段树的我,今天又去做了一遍线段树【模板】11,发现自己打代码真的是漏洞百出啊,不过最后还是对了,所以来水一篇博客 首先,这道模板题的要求就是: 1.区间加 2.区间求和 这两个操作都属于线段树的基本操作 ...
洛谷P3372 【模板】线段树 1 这题是线段树的区间加、区间修改和懒标记,注意开long long 1#include<bits/stdc++.h>2#definels (x<<1)3#definers (x<<1|1)4#definerep(i,a,b) for(int i=a;i<=b;i++)5#definepb(a) push_back(a)6usingnamespacestd;7typedeflonglongll;8typedef pair<int,...
线段树是一种基于分治思想的二叉树结构,用于区间上进行信息统计。 线段树的每个节点维护的是一个区间; 线段树具有唯一的根节点表示整个统计范围($[1,n]$); 线段树的每个叶子节点都表示一个长度为1的单元区间($[x,x]$); 对于每个内部节点$[l,r]$,它的左子节点为$[l,mid]$,右子节点为$[mid+1,r]$,其...