線段樹 B資料結構 牛客練習賽28

2022-05-03 13:57:19 字數 2675 閱讀 4764

qn姐姐最好了~

qn姐姐給你了乙個長度為n的序列還有m次操作讓你玩,

1 l r 詢問區間[l,r]內的元素和

2 l r 詢問區間[l,r]內的元素的平方

3 l r x 將區間[l,r]內的每乙個元素都乘上x

4 l r x 將區間[l,r]內的每乙個元素都加上x

第一行兩個數n,m

接下來一行n個數表示初始序列

就下來m行每行第乙個數為操作方法opt,

若opt=1或者opt=2,則之後跟著兩個數為l,r

若opt=3或者opt=4,則之後跟著三個數為l,r,x

操作意思為題目描述裡說的

對於每乙個操作1,2,輸出一行表示答案
示例1

複製

5 6

1 2 3 4 5

1 1 5

2 1 5

3 1 2 1

4 1 3 2

1 1 4

2 2 3

複製

15

5516

41

對於100%的資料 n=10000,m=200000 (注意是等於號)

保證所有詢問的答案在long long 範圍內

這個比較簡單,但是出現了乙個很難找的bug。

#include #include 

#include

#include

#include

#include

#include

#include

#define inf 0x3f3f3f3f

using

namespace

std;

typedef

long

long

ll;const

int maxn = 2e5 + 1000

;ll a[maxn];

struct

node

tree[maxn*4

];void push_up(int

id)void push_down(int

id)

if(tree[id].lazyadd)

}void build(int id,int l,int

r)

int mid = (l + r) >> 1

; build(id

<< 1

, l, mid);

build(id

<< 1 | 1, mid + 1

, r);

push_up(id);

}void updatec(int id,int l,int r,int

x)

int mid = (tree[id].l + tree[id].r) >> 1

;

if (l <= mid) updatec(id << 1

, l, r, x);

if (r > mid) updatec(id << 1 | 1

, l, r, x);

push_up(id);

}void updateadd(int id,int l,int r,int

x)

int mid = (tree[id].l + tree[id].r) >> 1

;

if (l <= mid) updateadd(id << 1

, l, r, x);

if (r > mid) updateadd(id << 1 | 1, l, r, x);//

這裡的id<<1|1忘記+1了,就寫成了id<<1

push_up(id);

}ll querysum(

int id,int l,int

r) ll ans = 0

; push_down(id);

int mid = (tree[id].l + tree[id].r) >> 1

;

if (l <= mid) ans += querysum(id << 1

, l, r);

if (r > mid) ans += querysum(id << 1 | 1

, l, r);

return

ans;

}ll queryc(

int id,int l,int

r) push_down(id);

ll ans = 0

;

int mid = (tree[id].l + tree[id].r) >> 1

;

if (l <= mid) ans += queryc(id << 1

, l, r);

if (r > mid) ans += queryc(id << 1 | 1

, l, r);

return

ans;

}int

main()

if(opt==2

)

if(opt==3

)

if(opt==4

)

}return0;

}

資料結構 線段樹 牛客練習賽28B

op 1 sum op 2 sum2 平方和 op 3 mul op 4 add 2個lazy標記 include include using namespace std define lc rt 1 define rc rt 1 1 define mid l r 2 typedef long lo...

牛客練習賽28 B 資料結構

題目描述 qn姐姐最好了 qn姐姐給你了乙個長度為n的序列還有m次操作讓你玩,1 l r 詢問區間 l,r 內的元素和 2 l r 詢問區間 l,r 內的元素的平方和 3 l r x 將區間 l,r 內的每乙個元素都乘上x 4 l r x 將區間 l,r 內的每乙個元素都加上x 第一行兩個數n,m ...

牛客練習賽 資料結構 線段樹

qn姐姐最好了 qn姐姐給你了乙個長度為n的序列還有m次操作讓你玩,1 l r 詢問區間 l,r 內的元素和 2 l r 詢問區間 l,r 內的元素的平方和 3 l r x 將區間 l,r 內的每乙個元素都乘上x 4 l r x 將區間 l,r 內的每乙個元素都加上x 第一行兩個數n,m 接下來一行...