小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 0sample output0 1 3 1
1 2 3 2
2 1 1
2 2 2
2 2 3
1hint24
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天中,他每天都會選擇相應天數的顏料數進行混合...