1082 線段樹練習 3時間限制: 3 s
空間限制: 128000 kb
題目等級 : 大師 maste
傳送門題目描述 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
/*
裸線段樹.
區間修改+區間查詢.
*/#include
#include
#define maxn 200001
#define ll long long
using namespace std
;ll n,m,tot,cut,aa[maxn+10];
struct data
tree[maxn*4];
void build(int l,int r)
int mid=(l+r)>>1
; tree[k].lc=cut+1
; build(l,mid);
tree[k].rc=cut+1
; build(mid+1,r);
tree[k].sum=tree[tree[k].lc].sum+tree[tree[k].rc].sum;}
void updata(int k)
void add(int k,int l,int r,int add1)
if(tree[k].bj) updata(k);
int mid=(tree[k].l+tree[k].r)>>1
; if(l<=mid) add(tree[k].lc,l,r,add1);
if(r>mid) add(tree[k].rc,l,r,add1);
tree[k].sum=tree[tree[k].lc].sum+tree[tree[k].rc].sum;}
ll query(int k,int l,int r)
int main()
build(1,n);
cin>>m;
for(int i=1
;i<=m;i++)
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
時間限制 3 s 空間限制 128000 kb 題目等級 大師 master 題解給你n個數,有兩種操作 1 給區間 a,b 的所有數增加x 2 詢問區間 a,b 的數的和。輸入描述 input description 第一行乙個正整數n,接下來n行n個整數,再接下來乙個正整數q,每行表示操作的個數...
Codevs1082 線段樹練習 3
題目描述 description 給你n個數,有兩種操作 1 給區間 a,b 的所有數增加x 2 詢問區間 a,b 的數的和。輸入描述 input description 第一行乙個正整數n,接下來n行n個整數,再接下來乙個正整數q,每行表示操作的個數,如果第乙個數是1,後接3個正整數,表示在區間 ...