1.区间加 2.区间求和 这两个操作都属于线段树的基本操作 前置——宏定义# #defineN100011#definelsonrt<<1#definersonrt<<1|1#defineintlonglong 由于我特别懒,不想写什么rt<<1rt<<1之类的东西,所以直接宏定义就好了,还有,为了不改intint,我直接把intint宏定义为longlonglonglong,省的麻烦(我真的是懒到...
r]包含,返回节点值if(tr[u].l >= l && tr[u].r <= r)returntr[u].sum;//如果当前节点与[l,r]不相交,返回0elseif(tr[u].l > r || tr[u].r < l)return0;//如果当前节点与[l,r]相交,递归从左右子树查询else{returnquery(u <<1, l, r) +query(u <<1|1, l, r);...
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++)...
}longlongquery(intL,intR,intl,intr,into) {if(L <= l && r <=R)returnsum[o];if(L > r || R <l)return0; pushdown(l, r, o);intmid = (l + r) >>1;returnquery(L, R, l, mid, o *2) + query(L, R, mid +1, r, o *2+1); }intmain() { scanf("%lld%lld", &n...
此题同codevs1082线段树练习3。 代码 #include<iostream>#include<cstdio>#include<cstring>#include<algorithm>usingnamespacestd;constintmaxn=200000+5; typedeflonglongll; inlineintread() {intx=0,f=1;charch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1; ch=getchar();}while(ch>...
洛谷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,...
洛谷P3372 【模板】线段树 1 【树状数组解法】,题链这里用树状数组写法;考虑求[1,x]的区间和\(sum_x\),于是将原数组差分后,相当于求一个二阶前缀和;设原数组为\(a_i\),差分后的数组为\(b_i=a_i-a_{i-1}\);于是\(a_i=\sum_{j=1}^{i}{b_j}\);那么[1,x]的...
【代码】 //线段树板子(splay复习) #include<iostream> #include<cstring> #include<cstdio> #define ll long long #define M(a) memset(a,0,sizeof a) #define fo(i,j,k) for(i=j;i<=k;i++) using namespace std; const int mxn=100005; ...
洛谷【P3372】【模板】线段树1 【题目大意】 第一行输入两个数n,m分别代表数字个数和操作个数(n<=100000, m<=100000) 第二行输入n个数,编号从1到n,分别代表这n个数的值 接下来m行有m个操作,格式如下: 1 x y k 将区间[x,y]内每个数加上k ...
题目:已知一个数列,你需要进行下面两种操作:1.将某区间每一个数加上x;2.求出某区间每一个数的和。 解法:如题,模版题。需要加上 lazy 标记,也就是我的 upd。lazy 标记的思路就是对一个结点更新(算和)了,但不继续更新它下面的结点,而是标记下来(每个数需加上的值)。注意——边界判断,不能调用a[-1]之...