線段樹 (維護 區間平方和 Lazy標記)

2021-09-29 00:09:59 字數 1942 閱讀 9042

外掛程式時間限制:c/c++ 1秒,其他語言2秒

空間限制:c/c++ 65536k,其他語言131072k

64bit io format: %lld

我的就是我的,你也是我的,記住了,狐狸!

——韓信-白龍吟

對於打賭輸了的小t會遭受到制裁,小s修改了資料庫使他可以派出許多軍隊來圍攻小t.

很不幸,小t與小s打賭打輸了,現在小t遭受著槍林彈雨與十面埋伏,因為小t是神所以他決定要扭轉局勢。

他要修改資料庫!

資料總庫的訊號牆有n個電極插頭,每個插頭有乙個訊號aia_iai​,

小t可以使在區間[ l,r ][\ l,r\ ][ l,r ]內的所有訊號加上乙個值k。

對於區間[ l,r ][\ l,r\ ][ l,r ]的訊號強度有乙個計算公式:

我們定義

f(k)=ak×∑j=k+1rajf(k)=a_k \times \sum_^r a_jf(k)=ak​×∑j=k+1r​aj​

則訊號強度就為:

∑i=lrf(i)\sum_^r f(i)∑i=lr​f(i)

你可以認為f(i)就是第i個插頭的訊號強度。

現在小t一會兒修改訊號值,一會兒詢問訊號強度,你是資料庫的管理員,為了不被小td,所以你要告訴他訊號強度是多少。

注:本系列題不按難度排序哦

第一行兩個整數n,q

第二行n個整數代表a

後q行代表操作:

一操作:1 l r x1\ l\ r\ x1 l r x代表區間[ l,r ][\ l,r\ ][ l,r ]加x。

二操作:2 l r2\ l\ r2 l r代表區間詢問。

每一行乙個數字,表示對於乙個二操作的答案。
示例1

複製

5 2

1 2 3 4 5

1 1 2 1

2 1 2

複製

6
樣例解釋:1 1 2 1使a[1]~a[2]的值每個都加了1, 即a[1]=2, a[2]=3,所以2 1 2=a[1]*a[2]=2*3=6

保證所有二操作的答案都是在long longlong\ longlong long範圍內(如果你不相信,可以寫高精)。

時空限制為標程的5倍,放心卡常。

100%  1≤n,q≤105100 \% \ \ 1 \le n,q \le 10^5100%  1≤n,q≤105

對於所有ai≤100a_i \le 100ai​≤100

//tree區間和 qtree區間平方和

ll a[100005];

int n,q;

void pushdown(int o,int l,int r)

void up(int o,int l,int r,int ql,int qr,ll v)

pushdown(o,l,r);//下傳

if(ql<=mid) up(ls,l,mid,ql,qr,v);

if(mid

線段樹維護區間加 乘 賦值 平方和 立方和

對於x點,有加法懶標記add和乘法懶標記mul,那麼可以以以下兩種方式維護元素的值 x x add mul 或者 x x mul add 可以證明先乘後加要比先加後乘容易維護 原來的乘 加法標記為 mul1 add1,後來要加上的乘 加法標記為 mul2 add2 x的值變為 x.dat x.dat...

J 外掛程式 線段樹維護平方的區間和

時間限制 c c 1秒,其他語言2秒 空間限制 c c 65536k,其他語言131072k 64bit io format lld 我的就是我的,你也是我的,記住了,狐狸!韓信 白龍吟 對於打賭輸了的小t會遭受到制裁,小s修改了資料庫使他可以派出許多軍隊來圍攻小t.很不幸,小t與小s打賭打輸了,現...

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

搞了整整一晚上加一下午 應該是懂了 加乘區間和別人的題解清晰易懂 這裡 平方和題目鏈結 注意 2.傳參的時候要清楚要傳的到底是什麼pushdown 1,l,r 找了很久 3.query的時候也要pushdown 因為只有這樣才能讓兒子進行完整的計算 include include define ll...