T1082 線段樹練習3 codevs

2022-04-10 21:58:42 字數 1353 閱讀 7228

題目描述 description

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

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

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

輸入描述 input description

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

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

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

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

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

pascal選手請不要使用readln讀入

輸出描述 output description

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

樣例輸入 sample input

1 2 3 2

2 2 3

樣例輸出 sample output

資料範圍及提示 data size & hint

資料範圍

1<=n<=200000

1<=q<=200000

#include #include 

#define maxn 2000000+15

#define ll long long

using

namespace

std;

ll n,m,l,a,b,x;

struct

node

tree[maxn*4

];void

tree_up(ll now)

void

tree_build(ll now,ll l,ll r)

tree[now].mid=(l+r)/2

; tree_build(now*2

,l,tree[now].mid);

tree_build(now*2+1,tree[now].mid+1

,r);

tree_up(now);

}void

tree_down(ll now)

void

tree_change_many(ll now,ll l,ll r,ll x)

if(tree[now].flag) tree_down(now);

if(tree[now].mid>=r) tree_change_many(now*2

,l,r,x);

else

if(tree[now].mid2+1

,l,r,x);

else

tree_up(now);

}ll tree_query(ll now,ll l,ll r)

intmain()

else

}return0;

}

Codevs P1082 線段樹練習3 線段樹

題目描述 description 給你n個數,有兩種操作 1 給區間 a,b 的所有數增加x 2 詢問區間 a,b 的數的和。輸入描述 input description 第一行乙個正整數n,接下來n行n個整數,再接下來乙個正整數q,每行表示操作的個數,如果第乙個數是1,後接3個正整數,表示在區間 ...

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,...