CSU OJ2151 集訓難度

2022-03-03 08:44:44 字數 2410 閱讀 2124

小l正在組織acm暑假集訓,但眾所周知,暑假集訓的萌新中有oi神犇,也有暑假才開始學演算法的萌新,如果統一集訓的難度,無法很好地讓萌新們得到訓練,所以小l想了乙個辦法,根據每次測試的情況,改變萌新們的集訓難度。現在將萌新們編號為1到n,最初萌新們的集訓難度為v0,測試後有兩種操作,第一種是某一區間的萌新的集訓難度同時提高,另一種是將某一段區間的萌新的集訓難度變為同乙個數,同時,wells希望在某次調整難度之後,知道某一段區間的萌新的集訓難度之和,由於小l比較鶸,他並不知道如何快速解決這個問題,你能幫幫他嘛?

input

第一行三個數n,m,v0 表示有n名萌新和m次調整,初始時全部萌新的集訓難度都為v0

第2~m+1行 每行三個數或四個數

0 x y v 表示把 [x,y]區間內的萌新的集訓難度都增加v

1 x y v 表示把 [x,y]區間內的萌新的集訓難度都變為v

2 x y表示詢問[x,y]區間內萌新的集訓難度之和

0output

每個詢問一行,輸出答案

sample input

3 5 0

0 1 3 1

1 2 3 2

2 1 1

2 2 2

2 2 3

sample output

1

24

hint

1 #include2 #include3

#define n 100001

4using

namespace

std;

5int

n,m,x,y;

6long

long

z,val,ans;

7struct

node

8 tree[n<<2

]; 13

14void build(int k,int l,int

r)15

22int mid=l+r>>1

;23 build(k<<1

,l,mid);

24 build(k<<1|1,mid+1

,r);

25 tree[k].sum=tree[k<<1].sum+tree[k<<1|1

].sum;26}

2728

void pushup(int

k)29

3233

void pushdown_set(int

k)34

4243

void pushdown_add(int

k)44

5152

void set(int k,int l,int r,long

long z)//

區間修改為某個值

5361

if(tree[k].v) pushdown_set(k);

62if

(tree[k].add) pushdown_add(k);

63int mid=tree[k].l+tree[k].r>>1;64

if(l<=mid) set(k<<1

,l,r,z);

65if(r>mid) set(k<<1|1

,l,r,z);

66pushup(k);67}

6869

void add(int k,int l,int r,long

long z)//

區間加上某個值

7077

if(tree[k].v) pushdown_set(k);

78if

(tree[k].add) pushdown_add(k);

79int mid=tree[k].l+tree[k].r>>1;80

if(l<=mid) add(k<<1

,l,r,z);

81if(r>mid) add(k<<1|1

,l,r,z);

82pushup(k);

83}

8485

void query(int k,int l,int

r)86

92if

(tree[k].v) pushdown_set(k);

93if

(tree[k].add) pushdown_add(k);

94int mid=tree[k].l+tree[k].r>>1;95

if(l<=mid) query(k<<1

,l,r);

96if(r>mid) query(k<<1|1

,l,r);97}

98int

main()

99111

else

if(temp==1

)112

116else

117123

124}

125 }

CSU OJ 集訓難度(線段樹)

小l正在組織acm暑假集訓,但眾所周知,暑假集訓的萌新中有oi神犇,也有暑假才開始學演算法的萌新,如果統一集訓的難度,無法很好地讓萌新們得到訓練,所以小l想了乙個辦法,根據每次測試的情況,改變萌新們的集訓難度。現在將萌新們編號為1到n,最初萌新們的集訓難度為v0,測試後有兩種操作,第一種是某一區間的...

8 1 集訓日記

今天看了有關容斥原理的幾篇部落格。容斥原理的基本思想是 先不考慮重疊的情況,把所有物件的數目求出,然後再把計數時重複計算的數目排斥出去,使得計算的結果既無遺漏又無重複。首先是乙個經典的互素問題 hdoj 4135 co prime 題目大意是 給定a,b,n,求區間 a,b 中與n互素的數的個數。思...

8 4 集訓日記

今天看了有關組合數學的一些內容。首先,排列組合的 為 ll c ll n,ll m ll a ll n,ll m 一道組合數學 位運算的題,hdoj4810 wall painting 題目大意 有一位畫家,有 n種顏料,給出 n種顏料的值。然後在1到 n天中,他每天都會選擇相應天數的顏料數進行混合...