《牛客練習賽28 B》

2022-06-19 19:57:08 字數 1972 閱讀 8871

這題主要就是多了乙個平方和的操作。

我們維護平方和的值的時候。

需要注意在下放的時候,要先把乘法之後的sum1算出來,這對算sum1最終的值沒有影響。

但是對sum2的值有影響。因為我們在計算中就在更新adtag的值,所以這個adtag它的sum1應該最終化。

#includeusing

namespace

std;

typedef

long

long

ll;typedef pair

int>pii;

const

int n = 1e4+5

;const

int m = 1e6+5

;const ll mod = 998244353

;#define pi acos(-1)

#define inf 1e18

#define ct0 cin.tie(0),cout.tie(0)

#define io ios::sync_with_stdio(false)

#define dbg(ax) cout << "now this num is " << ax << endl;

namespace

fastio

while(c >= '

0' && c <= '9')

return x*f;

}}using

namespace

fastio;

ll a[n];

struct nodenode[n << 2

];void pushup(int

idx)

void pushdown(int

idx)

void build(int l,int r,int

idx)

int mid = (l + r) >> 1

; build(l,mid,idx

<< 1

); build(mid + 1,r,idx << 1 | 1

); pushup(idx);

}void tree_mul(int l,int r,int

idx,ll val)

int mid = (node[idx].l + node[idx].r) >> 1

; pushdown(idx);

if(mid >= l) tree_mul(l,r,idx << 1

,val);

if(mid < r) tree_mul(l,r,idx << 1 | 1

,val);

pushup(idx);

}void tree_add(int l,int r,int

idx,ll val)

int mid = (node[idx].l + node[idx].r) >> 1

; pushdown(idx);

if(mid >= l) tree_add(l,r,idx << 1

,val);

if(mid < r) tree_add(l,r,idx << 1 | 1

,val);

pushup(idx);

}ll query(

int l,int r,int idx,int

id)

int mid = (node[idx].l + node[idx].r) >> 1

; ll ans = 0

; pushdown(idx);

if(mid >= l) ans += query(l,r,idx << 1

,id);

if(mid < r) ans += query(l,r,idx << 1 | 1

,id);

return

ans;

}int

main()

else

}return0;

}

view code

牛客練習賽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 ...

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

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,mop...

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