題目描述 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,...