洛谷题单指南-线段树-P3373 【模板】线段树 2 原题链接:https://www.luogu.com.cn/problem/P3373 题意解读:对于序列a[n],支持三种操作:1.对区间每个数乘上一个数 2.对区间每个数加上一个数 3.求区间和 解题思路:由于支持乘、加两种区间修改操作,是线段树的另一种典型应用:多个懒标记 显然,这里需要两个...
1voidadd(intl,intr,intrt) {//跟线段树1基本没有区别2if(x <= l && y >=r) {3tr[rt].add = (tr[rt].add + k) %p;4tr[rt].v = (tr[rt].v + (r - l +1) * k) %p;5return;6}7pushdown(tr[rt].lc, tr[rt].rc, rt);8intmid = (l + r) >>1;9if(x <=mid)10add(...
lazy1[maxn*4],lazy2[maxn*4],sum;voidpushup(intx){a[x]=(a[2*x]+a[x*2+1])%P;}voidbuild(intl,intr,intx){intmid;if(l==r){scanf("%lld",&a[x]);a[x]%=P;return;}if(r>l){mid=(l+r)>>1;build(l,mid,2*x);build(mid+1,r,2*x+1);}pushup(x);}void...
普通线段树中是控制的范围,动态开点线段树是左右儿子的节点号! // 动态开点线段树中u节点的控制范围是通过函数的2,3两个参数传递过去的,不是记录在tr[u].l,tr[u].r中的!记录在tr[u].l,tr[u].r中的是左右儿子的节点号! // 理解清楚这一点非常重要,因为后面在求区间长度是,普通线段树len(u)=(tr[u...
【模板】线段树 2 - 洛谷www.luogu.com.cn/problem/P3373 思路: 区间更新既有加法又有乘法就要考虑他们的先后顺序问题。数组tree[rt]表示rt节点的值,也就是这个区间的和;mark1[rt]表示rt节点的乘法lazy标记;mark2[rt]表示rt节点的加法lazy标记。当进行区间乘以v的更新时,tree[rt]要乘v,mark1[rt]要乘...
P3373 【模板】线段树 2 区间求和 区间乘 区间加,题目描述如题,已知一个数列,你需要进行下面两种操作:1.将某区间每一个数加上x2.将某区间每一个数乘上x3.求出某区间每一个数的和输入输出格式输入格式:第一行包含三个整数N、M、P,分别表示该数列数字的个数、操作的总个
P3373 【模板】线段树 2 题目描述 如题,已知一个数列,你需要进行下面三种操作: 将某区间每一个数乘上 x 将某区间每一个数加上 x 求出某区间每一个数的和 输入格式 第一行包含三个整数 n , m , p 分别表示该数列数字的个数、操作的总个数和模数。
P3373 【模板】线段树 2 链接 题目描述 如题,已知一个数列,你需要进行下面三种操作: 将某区间每一个数乘上 xx 将某区间每一个数加上 xx 求出某区间每一个数的和 输入格式 第一行包含三个整数 n,m,pn,m,p,分别表示该数列数字的个数、操作的总个数和模数。 第二行包含 nn 个用空格分隔的整数,其中...
P3373 【模板】线段树 2 乘法优先还是加法优先 ①加法优先,即规定好segtree[root*2].value=((segtree[root*2].value+segtree[root].add)*segtree[root].mul)%p,问题是这样的话非常不容易进行更新操作,假如改变一下add的数值,mul也要联动变成奇奇怪怪的分数小数损失精度,我们内心是很拒绝的; ②乘法优先,即...
[线段树]Luogu P3373 【模板】线段树 2 #include<cstdio> #include<cstring> #include<algorithm> #define R register #define llt long long int #define N 100000 using namespace std; inline void read(llt& x){ char temp=getchar();bool u=0; for(x=0;temp<'0'||temp>'9';u=temp=='-',...