首页 > TAG信息列表 > P3373

P3373 【模板】线段树 2

#include <bits/stdc++.h> #define LL long long using namespace std; const int N = 1e5 + 10; int n, m, p; int w[N]; struct Node { int l, r; int sum, add, mul; }tr[N << 2]; void pushup(int u) { tr[u].sum = (tr[u << 1].sum + tr[u

P3373&&ybtoj【数据结构】4章4题【【模板】线段树2】

【模板】线段树2 题目 P3373 解析 前置知识:线段树区间加区间求和 好的,现在我们考虑设计懒标记:一个乘,一个加,当然是先乘再加才不会对加产生影响 加法直接按区间加下传,乘法就需要两个懒标记一起乘 注意:乘法的懒标记初始为1 还有就是下传时要先下传乘法,再下传加法 剩下的就是板

P3373 【模板】线段树 2

令人心碎的题,尤其是pushdown操作,一定要好好想想 #include<iostream> #include<cstdio> using namespace std; #define LL long long const int N = 100010; struct Node{ int l, r; LL sum; LL add; // lazy1 LL mul; // lazy2 }tr[N * 4]; int n, m, q; LL

线段树 P3373

题目 https://www.luogu.com.cn/problem/P3373 思路 参考:https://www.luogu.com.cn/blog/milkfilling/solution-p3373 ①加法优先,即规定好segtree[root*2].value=((segtree[root*2].value+segtree[root].add)*segtree[root].mul)%p,问题是这样的话非常不容易进行更新操作,假如改

P3373 【模板】线段树 2(题解)

线段树解法 好丢脸,这个题做了一下午,调试了三个多小时...... 先讲讲解题思路 既然这里是线段树,就要用到lazy—tag。又有加法又有乘法的话,就要用到两个lazy-tag,分别用数组jia[]和chng[]表示。线段树用数组t[]存。 我们让lazy-tag还原数值时,先乘chng[],再加jia[](人为规定,这样好算) 怎

Luogu P3373 【模板】线段树 2

#include<cstdio>#include<cstring>#include<algorithm>#define R register#define llt long long int#define N 100000using namespace std;inline void read(llt& x){ char temp=getchar();bool u=0; for(x=0;temp<'0'||temp>&

P3373线段树2

  #include<bits/stdc++.h>using namespace std;typedef long long ll;const ll N=100001;ll sum[N<<2],lazy1[N<<2],lazy2[N<<2];ll a[N];ll n,m,p;inline ll read(){ ll ans=0; char last=' ',ch=getchar(); while(ch<'

[洛谷P3373] 线段树板子题

线段树区间修改,区间查询模板题 改了n次才过啊!!! 传送门 #include<bits/stdc++.h> using namespace std; #define MAX 100005 struct Node { int l,r; long long lazyadd,lazymul,val; }node[MAX<<2]; long long d[MAX],p; inline void pushup(int rt) { node[rt].val=(no

[洛谷P3373] 线段树板子题

线段树区间修改,区间查询模板题 改了n次才过啊!!! 传送门 #include<bits/stdc++.h> using namespace std; #define MAX 100005 struct Node { int l,r; long long lazyadd,lazymul,val; }node[MAX<<2]; long long d[MAX],p; inline void pushup(int rt) { node[rt].val=(no

[洛谷P3373] 线段树板子题

线段树区间修改,区间查询模板题 改了n次才过啊!!! 传送门 #include<bits/stdc++.h> using namespace std; #define MAX 100005 struct Node { int l,r; long long lazyadd,lazymul,val; }node[MAX<<2]; long long d[MAX],p; inline void pushup(int rt) { node[rt].val=(no

P3373 【模板】线段树 2

题目来源:洛谷 题目描述 如题,已知一个数列,你需要进行下面三种操作: 1.将某区间每一个数乘上x 2.将某区间每一个数加上x 3.求出某区间每一个数的和 输入输出格式 输入格式:   第一行包含三个整数N、M、P,分别表示该数列数字的个数、操作的总个数和模数。 第二行包含N个用空格分隔的整数

P3373 【模板】线段树 2

线段树的模板,但是还应注意维护乘标记,乘法的优先级大于加法,一定记得还要取模。 #include<bits/stdc++.h>using namespace std;const int maxn=1000010;struct sege_tree{ int l; int r; long long lazymul; long long lazyadd; long long v;}tree[7*maxn];int a[max

【P3373】 【模板】线段树 2 {线段树,模板}

OMG_Data_Structure So_Interesting_Mother-Fucker(译:数据结构,奥妙重重) 虽然只是模板,但还是挺麻烦的,可见数据结构都是毒瘤。   已知一个数列,你需要进行下面三种操作: 操作1: 格式:1 x y k 含义:将区间[x,y]内每个数乘上k 操作2: 格式:2 x y k 含义:将区间[x,y]内每个数加上k 操作3: 格式:3 x