牛客練習賽28 B 複習線段樹 )

2021-09-10 17:56:49 字數 2010 閱讀 3949

description:

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

input:

n,mopi  li ri xi (for i=1...m)

output:

answers

analysis:

sum1[i] 表示區間和,sum2[i]表示區間平方和

add[i]表示同加延遲標記,mul[i]表示同乘延遲標記

注意更新延遲標記的時候,mul會對add產生影響

referenceo_o:

#define _crt_secure_no_warnings  

#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;

#define _for(i,a,b) for(int i=(a);i<(b);++i)

#define _rep(i,a,b) for(int i=(a);i<=(b);++i)

typedef long long ll;

const int inf = 1 << 30;

const int maxn = 10005;

const int mod = 1e9+7;

const double eps = 1e-6;

#define lson l,mid,rt<<1

#define rson mid+1,r,rt<<1|1

const int m = 301, b = 500;

int n, m;

ll add[maxn << 2], mul[maxn << 2], sum1[maxn << 2], sum2[maxn << 2];

ll a[maxn];

void pushup(int rt)

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

int mid = (l + r) >> 1;

build(lson);

build(rson);

pushup(rt);

}void pushdown(int rt, int len)

void update(int l, int r, int rt, int l, int r, int val, int type)

else

} pushdown(rt, r - l + 1);

int mid = (l + r) >> 1;

if (l <= mid) update(lson, l, r, val, type);

if (r > mid) update(rson, l, r, val, type);

pushup(rt);

}ll q1, q2,res;

void query(int l, int r, int rt, int l, int r)

int mid = (l + r) >> 1;

res = 0;

pushdown(rt, r - l + 1);

if (l <= mid) query(lson, l, r);

if (r > mid) query(rson, l, r);

}int main()

build(1, n, 1);

int op, l, r;

ll v;

while (m--)

else if (op == 2)

else if (op == 3)

else

} }return 0;

}

《牛客練習賽28 B》

這題主要就是多了乙個平方和的操作。我們維護平方和的值的時候。需要注意在下放的時候,要先把乘法之後的sum1算出來,這對算sum1最終的值沒有影響。但是對sum2的值有影響。因為我們在計算中就在更新adtag的值,所以這個adtag它的sum1應該最終化。includeusing namespace ...

資料結構 線段樹 牛客練習賽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 ...