線段樹加乘操作 求區間和和平方和

2021-08-28 18:54:18 字數 1832 閱讀 6728

搞了整整一晚上加一下午 應該是懂了

加乘區間和別人的題解清晰易懂:這裡

平方和題目鏈結

注意:2.傳參的時候要清楚要傳的到底是什麼pushdown(1,l,r)找了很久

3.query的時候也要pushdown 因為只有這樣才能讓兒子進行完整的計算

#include #include #define ll long long

using namespace std;

const int n=100100;

ll a[n];

struct nodesegtree[n<<2];

inline int lson(int x)

inline int rson(int x)

void build(int t,int l,int r)

int mid=(l+r)>>1;

build(lson(t),l,mid);

build(rson(t),mid+1,r);

segtree[t].val=segtree[lson(t)].val+segtree[rson(t)].val;

segtree[t].val2=segtree[lson(t)].val2+segtree[rson(t)].val2;

}void pushdown(int t,int l,int r)

///*

void update1(int t,int l,int r,int s,int e,ll c)

pushdown(t,l,r);

int mid=(l+r)>>1;

update1(lson(t),l,mid,s,e,c);

update1(rson(t),mid+1,r,s,e,c);

segtree[t].val=segtree[lson(t)].val+segtree[rson(t)].val;

segtree[t].val2=segtree[lson(t)].val2+segtree[rson(t)].val2;

}///+

void update2(int t,int l,int r,int s,int e,ll c)

pushdown(t,l,r);

int mid=(l+r)>>1;

update2(lson(t),l,mid,s,e,c);

update2(rson(t),mid+1,r,s,e,c);

segtree[t].val=segtree[lson(t)].val+segtree[rson(t)].val;

segtree[t].val2=segtree[lson(t)].val2+segtree[rson(t)].val2;

}ll query1(int t,int l,int r,int s,int e)

pushdown(t,l,r);

int mid=(l+r)>>1;

return query1(lson(t),l,mid,s,e)+query1(rson(t),mid+1,r,s,e);

}ll query2(int t,int l,int r,int s,int e)

pushdown(t,l,r);

int mid=(l+r)>>1;

return query2(lson(t),l,mid,s,e)+query2(rson(t),mid+1,r,s,e);

}int main()

build(1,1,n);

while(m--)

else if(op==4)

else if(op==1)

else if(op==2)}}

return 0;

}

線段樹 區間加乘區間最大

如題,已知乙個數列,你需要進行下面兩種操作 1.將某區間每乙個數加上x 2.將某區間每乙個數乘上x 3.求出某區間每乙個數的和 第一行包含三個整數n m p,分別表示該數列數字的個數 操作的總個數和模數。第二行包含n個用空格分隔的整數,其中第i個數字表示數列第i項的初始值。接下來m行每行包含3或4個...

線段樹 加 乘操作

include include using namespace std 題目中給的p int p 暫存數列的陣列 long long a 100007 線段樹結構體,v表示此時的答案,mul表示乘法意義上的lazytag,add是加法意義上的 struct nodest 400007 buildtr...

維護序列(線段樹維護區間乘 區間加)

給定乙個長度為n的原序列和模數mod,m個操作,a,b 區間乘c,a,b 區間加c,統計 a,b 的區間和。思路 線段樹維護的還是區間和,但是這裡我們需要用到兩個懶標記,乙個記錄加法,乙個記錄乘法,乘法懶標記下傳之後要重置為1而不是0。對於乙個乘法操作,他影響的是區間和還有這個區間的加法標記 乘法標...