題意:給n個鉤子,每次都會更新從x到y這個範圍的鉤子價值,最後求鉤子的總價值。初始的鉤子價值為1.
直接暴力求解是會超時,需要有線段樹懶惰標記維護資料。
線段樹的懶惰標記,直接記錄了在x到y之間的資料,這樣可以減少遞迴總數。
1 #include2 #include3using
namespace
std;
4const
int maxn=100006;5
int t[maxn*4],lazy[maxn*4];6
7void update(int
now)
1011
void build(int x,int y,int
now)
2021
void pushdata(int now,int
x)28}29
30void add(int x,int y,int now,int goal_x,int goal_y,int
change)
36 pushdata( now, y-x+1
);37
int mid=(x+y)>>1;38
if(goal_x<=mid) add( x, mid, now<<1
, goal_x, goal_y, change);
39if(mid1, y, now<<1|1
, goal_x, goal_y, change);
40update(now);41}
4243
intmain()
53 printf("
case %d: the total value of the hook is %d.\n
",++kkk, t[1
]);54}55
56return0;
57 }
HDU 1698 線段樹區間更新
之前一直覺得自己線段樹敲得很熟練,然後。某天。是的,就是我的資料結構周開始的時候我發現。我特麼才會單點更新是怎麼回事!只會區間查詢是腫麼回事!摔!恩。就是表達一下弱渣的心情。區間更新,用到延遲操作。延遲操作應該是這麼回事。線段樹的優越性就是體現在,第一是二分查詢,第二是區間操作。當我們需要多次對區間...
hdu1698線段樹(區間更新)
題目鏈結just a hook 乙個鎖鏈,其組成成部分有三種材料,金銀銅,分數為3 2 1,每次可以更換一段的材料,求最後的分數 鉤子最多長100,000 操作最多有100,000次,肯定不能暴力 線段樹 延遲標記lazy 每個節點新增加乙個標記 lazy 每次要更新節點時,不更新到葉節點,記錄這個...
HDU 1698 線段樹(區間更新
題目鏈結 思路 今天才入門線段樹,一開始做這題還有一點懵,因為我開始的思路是區間更新時要考慮之前的狀態,比如之前的乙個需要更新的節點是鐵 1 現在再要求更新為鐵 1 則不進行更新.然後就要分很多情況去討論,很麻煩.所以另外想了乙個思路 受懶操作的啟發,我想我能不能定義乙個向下傳遞的值type 傳遞後...