\(【題目描述】\)
有乙個長為\(n(n \leq 10^5)\)的序列,支援三種操作,分別是給一段區間\([l,r]\)內的所有數加上、乘上乙個數,以及求一段區間\([l,r]\)中的數字的和。
\(【輸入樣例】\)
\(【輸出樣例】\)7 43
1 2 3 4 5 6 7
51 2 5 5
3 2 4
2 3 7 9
3 1 3
3 4 7
\(【考點】\)2
358
線段樹\(【做法】\)
維護兩個懶標記\(add_i\)和\(mul_i\),每次執行加法操作時,給對應的\(add_i\)加上那個數;每次進行乘法操作時,給對應的\(mul_i\)和\(add_i\)都乘上那個數。在標記下傳時,先下傳乘法標記,再下傳加法標記。
\(【**】\)
#include#includeusing namespace std;
typedef long long ll;
const int n=1e5+50;
ll sum[n*4],add[n*4],mul[n*4];
ll a[n];
int n,m,p;
void mul(int k,int l,int r,ll v)
void add(int k,int l,int r,ll v)
void pushdown(int k,int l,int r)
if(add[k])
add[k]=0,mul[k]=1;
}void build(int k,int l,int r)
int mid=(l+r)>>1;
build(k<<1,l,mid);
build(k<<1|1,mid+1,r);
sum[k]=(sum[k<<1]+sum[k<<1|1])%p;
}void modify(int k,int l,int r,int x,int y,ll v,int s)
ll query(int k,int l,int r,int x,int y)
int main()
if(k==2)
if(k==3)
}return 0;
}
線段樹 AHOI 2009 維護序列
老師交給小可可乙個維護數列的任務,現在小可可希望你來幫他完成。有長為n的數列,不妨設為a1,a2,an 有如下三種操作形式 1 把數列中的一段數全部乘乙個值 2 把數列中的一段數全部加乙個值 3 詢問數列中的一段數的和,由於答案可能很大,你只需輸出這個數模p的值。第一行兩個整數n和p 1 p 100...
AHOI2009 維護序列 線段樹
老師交給小可可乙個維護數列的任務,現在小可可希望你來幫他完成。有長為n的數列,不妨設為a1,a2,an 有如下三種操作形式 1 把數列中的一段數全部乘乙個值 2 把數列中的一段數全部加乙個值 3 詢問數列中的一段數的和,由於答案可能很大,你只需輸出這個數模p的值。線段樹,打個乘法lazy標記即可 i...
bzoj1798 ahoi2009 維護序列
time limit 30 sec memory limit 64 mb submit 3714 solved 1364 submit status discuss 老師交給小可可乙個維護數列的任務,現在小可可希望你來幫他完成。有長為n的數列,不妨設為a1,a2,an 有如下三種操作形式 1 把數列...