hdu 4578 Transformation
又做了一道好題。。
有三種操作:
1 a b c [a,b]加上c
2 a b c [a,b]乘上c
3 a b c [a,b]變為c
4 a b c 求[a,b]的c次方和(1<=c<=3)
這題首先需要解決的第一個問題是加上或乘上一個數對這個區間的c次方和分別產生什麼改變,很簡單,一化簡就能得到。
第二個問題是當一段區間上既有乘又有加的lazy時應該怎麼向下推送,因為一段區間上只能有一個lazy,我起初做的是先將有lazy的標記向下傳,直到不沖突為止,然後更新這個區間的lazy,後來無數次的wa。代碼太長了,簡直無法debug。
同學說要找到這兩個lazy的關系,即可以把每個數看做mult * x + add。加上一個數y時,add+= y,乘上一個數y時,mult *= y,add *= y。這樣就解決了先加後乘和先乘後加的問題了,感覺好機智,mark。
#include
#include
#include