P3372 模板 線段樹 1

2022-08-10 14:12:20 字數 2645 閱讀 5537

提交   121.16k

通過    48.14k

時間限制    1.00s

記憶體限制    125.00mb

提交答案

加入收藏

難度   普及/提高-

歷史分數   100

提交記錄      

檢視題解

高效能進入討論版

如題,已知乙個數列,你需要進行下面兩種操作:

將某區間每乙個數加上 kk。

求出某區間每乙個數的和。

第一行包含兩個整數 n, mn,m,分別表示該數列數字的個數和操作的總個數。

第二行包含 nn 個用空格分隔的整數,其中第 ii 個數字表示數列第 ii 項的初始值。

接下來 mm 行每行包含 33 或 44 個整數,表示乙個操作,具體如下:

1 x y k:將區間 [x, y][x,y] 內每個數加上 kk。

2 x y:輸出區間 [x, y][x,y] 內每個數的和。

輸出包含若干行整數,即為所有操作 2 的結果。

輸入 #1複製

551

5423

2241

2322

3411

5121

4

輸出 #1複製

11

820

對於 30% 的資料:n≤8,m≤10。

對於 70% 的資料:n≤103

,m≤104

。對於 100% 的資料:1≤n,m≤105

。保證任意時刻數列中任意元素的和在 [-263, 263)內。

【樣例解釋】

不多說了,線段樹板子題。

#include using

namespace

std;

const

int maxn = 1000090

;long

long

nums[maxn];

long

long

totn;

long

long

totdo;

bool

tempquest;

struct

node

inline

void

push_up()

inline

void

push_down()

else

if (rch ==null)

lch->maketag(tag);

rch->maketag(tag);

tag = 0

; }

}node(

const

long

long l, const

long

long

r)

else

}inline

bool in_range(const

long

long l, const

long

long

r)

inline

bool out_of_range(const

long

long l, const

long

long

r)

inline

void update(const

long

long l, const

long

long r, const

long

long

w)

else

if (!out_of_range(l, r))

}inline

long

long quest_range_sum(const

long

long l, const

long

long

r)

else

}push_down();

return lch->quest_range_sum(l, r) + rch->quest_range_sum(l, r);

}};inline

long

long

read()

while (ch >= '

0' && ch <= '9'

)

return x *f;

}void write(const

long

long&x)

long

long s = 0

;

while (tmp > 0

)

while (s > 0

)

}int

main()

node* root = new node(1

, totn);

for (int i = 1; i <= totdo; i++)

else

}return0;

}//likiblaze code

P3372 模板 線段樹 1

線段樹學習 這個題來看,線段樹分為建樹,更新,查詢。1.建樹 void build ll p,ll l,ll r ll mid l r 1 build lson p l,mid build rson p mid 1,r push up sum p void push up sum ll p 這段 的...

P3372 模板 線段樹 1

題 include includeusing namespace std typedef long long ll ll n,m,ans,x,y,op,val 因為下面有的函式需要用到x,y,val值,懶得傳參,故直接寫為全域性變數 const int n 100000 struct nodetre...

P3372 模板 線段樹 1

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