Codevs P1082 線段樹練習3 線段樹

2021-07-08 11:02:11 字數 1292 閱讀 4084

題目描述 description

給你n個數,有兩種操作:

1:給區間[a,b]的所有數增加x

2:詢問區間[a,b]的數的和。

輸入描述 input description

第一行乙個正整數n,接下來n行n個整數,

再接下來乙個正整數q,每行表示操作的個數,

如果第乙個數是1,後接3個正整數,

表示在區間[a,b]內每個數增加x,如果是2,

表示操作2詢問區間[a,b]的和是多少。

輸出描述 output description

對於每個詢問輸出一行乙個答案

樣例輸入 sample input

3 1

2 3

2 1 2 3 2

2 2 3

樣例輸出 sample output

9資料範圍及提示 data size & hint

資料範圍

1<=n<=200000

1<=q<=200000

指標操作較慢,用f陣列減少操作

#include

#include

using namespace std;

#define n 200005

long

long n,m,k,x,y,z;

long

long d[n*3],f[n*3];

inline long

long

in()

void build(long

long o,long

long l,long

long r)

else d[o]=in();

}void change(long

long o,long

long l,long

long r,long

long data)

long

long m=(l+r)>>1;

if(x<=m) change(o*2,l,m,data);

if(m2+1,m+1,r,data);

d[o]=d[o*2]+d[o*2+1]+f[o]*(r-l+1);

return;

}long

long sum(long

long o,long

long l,long

long r,long

long v)

int main()

else

}return

0;}

codevs 1082 線段樹練習 3

1082 線段樹練習 3 區間修改,區間查詢 時間限制 3 s 空間限制 128000 kb 題目等級 大師 master 給你n個數,有兩種操作 1 給區間 a,b 的所有數增加x 2 詢問區間 a,b 的數的和。輸入描述 input description 第一行乙個正整數n,接下來n行n個整數...

Codevs 1082 線段樹練習 3

1082 線段樹練習 3 時間限制 3 s 空間限制 128000 kb 題目等級 大師 maste 傳送門題目描述 description 給你n個數,有兩種操作 1 給區間 a,b 的所有數增加x 2 詢問區間 a,b 的數的和。輸入描述 input description 第一行乙個正整數n,...

codevs 1082 線段樹練習 3

時間限制 3 s 空間限制 128000 kb 題目等級 大師 master 題解給你n個數,有兩種操作 1 給區間 a,b 的所有數增加x 2 詢問區間 a,b 的數的和。輸入描述 input description 第一行乙個正整數n,接下來n行n個整數,再接下來乙個正整數q,每行表示操作的個數...