故输出应为17、2(40mod38=2) 分析 区间乘与区间加操作,注意要先乘后加,pushdown函数是核心 #include<bits/stdc++.h>#defineint long longusingnamespacestd;intn,m,p;inta[100005],t[100005<<2],ad[100005<<2],mu[100005<<2];voidpushup(intnum){ t[num]=(t[num<<1]+t[num<<1|1])%p; }...
【模板】线段树 2 如题,已知一个数列,你需要进行下面三种操作: 将某区间每一个数乘上xx; 将某区间每一个数加上xx; 求出某区间每一个数的和。 输入格式 第一行包含三个整数n,q,mn,q,m,分别表示该数列数字的个数、操作的总个数和模数。 第二行包含nn个用空格分隔的整数,其中第ii个数字表示数列第ii项...
普通线段树中是控制的范围,动态开点线段树是左右儿子的节点号! // 动态开点线段树中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 思路:与线段树1相比只多一个区间乘法,因此如法炮制一个对于乘法区间更新的操作,用mul_tag代表乘法的lazy数组,用tag代表加法的lazy数组。 在又有加法又有乘法的区间更新中,push-down操作时需要考虑处理lazy数组和mul_lazy数组的先后顺序,因此有以下两种...
【模板】线段树 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.将某区间每一个数乘上\(x\) 2.将某区间每一个数加上\(x\) 3.求出某区间每一个数的和 输入输出格式 输入格式: 第一行包含三个整数\(N\)、\(M\)、\(P\),分别表示该数列数字的个数、操作的总个数和模数...
操作2 : 格式:2 x y k含义:将区间 [ x , y ]内每个数加上 k 操作3 : 格式:3 x y含义:输出区间 [ x , y ]内每个数的和对 p 取模所得的结果 输出格式 输出包含若干行整数,即为所有操作 3 的结果。 输入输出样例 输入#1 5 5 38
P3373 【模板】线段树 2 乘法优先还是加法优先 ①加法优先,即规定好segtree[root*2].value=((segtree[root*2].value+segtree[root].add)*segtree[root].mul)%p,问题是这样的话非常不容易进行更新操作,假如改变一下add的数值,mul也要联动变成奇奇怪怪的分数小数损失精度,我们内心是很拒绝的; ②乘法优先,即...
2.将某区间每一个数乘上x 3.求出某区间每一个数的和 输入输出格式 输入格式: 第一行包含三个整数N、M、P,分别表示该数列数字的个数、操作的总个数和模数。 第二行包含N个用空格分隔的整数,其中第i个数字表示数列第i项的初始值。 接下来M行每行包含3或4个整数,表示一个操作,具体如下: 操作1: 格式...
洛谷题单指南-线段树-P3373 【模板】线段树 2 原题链接:https://www.luogu.com.cn/problem/P3373 题意解读:对于序列a[n],支持三种操作:1.对区间每个数乘上一个数 2.对区间每个数加上一个数 3.求区间和 解题思路:由于支持乘、加两种区间修改操作,是线段树的另一种典型应用:多个懒标记...