區間插入求和 線段樹入門(二)

2021-06-14 14:54:23 字數 1113 閱讀 7942

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

321 2 3 2

2 2 3

樣例輸出 sample output 9

資料範圍及提示 data size & hint 1<=n<=200000

1<=q<=200000

# include # include # define n 5000000

using namespace std;

struct node;

node st[n];

int a[n];

void build(int v,int l,int r)

int mid = (l+r)/2;

build(v*2,l,mid);

build(v*2+1,mid+1,r);

st[v].sum=st[v*2].sum + st[v*2+1].sum;

}void insert(int v,int l,int r,long long c)

int mid = (st[v].l+st[v].r)/2; // 向下更新

if (r<=mid) insert(v*2,l,r,c);

else if (l>mid) insert(v*2+1,l,r,c);

else

}long long getsum(int v,int l,int r)

int main()

build(1,1,n);

int m,t,l,r,c;

for (scanf("%d",&m);m;m--)else

} return 0;

}

線段樹 區間求和

給定一數列,規定有兩種操作,一是修改某個元素,二是求區間的連續和。輸入資料第一行包含兩個正整數n,m n 100000,m 500000 以下是m行,每行有三個正整數k,a,b k 0或1,a,b n k 0時表示將a處數字加上b,k 1時表示詢問區間 a,b 內所有數的和。對於每個詢問輸出對應的答...

線段樹(區間更新求和)

poj 3468 include using namespace std define max 100100 struct node 求區間長度 int get dis node tree max 3 long long d max 建樹 long long build int left,int r...

線段樹 區間求和模板 (區間修改)

include include include include include include include include include define mem a memset a,0,sizeof a define mem2 a memset a,1,sizeof a define mod ...