hdu1698 線段樹區間更新,lazy標記

2021-08-19 02:54:46 字數 1085 閱讀 6603

題意:一段線段由n條小線段組成,每次操作把乙個區間的小線段變成金銀銅之一(金的價值為3,銀為2,銅為1),最初可當做全為銅;最後求這條線段的總價值。

void build(int l, int r, int rt) 

int m = (l + r) >> 1;

build(lson);

build(rson);

pushup(rt);

}

下面是完整**:

#include 

#include

#include

using

namespace

std;

#define lson l,m,rt<<1

#define rson m+1,r,rt<<1|1

int t, n, q;

const

int maxn = 1e5 + 5;

int sum[maxn << 2], lazy[maxn << 2];

void pushup(int rt)

void pushdown(int rt, int m)

}void build(int l, int r, int rt)

int m = (l + r) >> 1;

build(lson);

build(rson);

pushup(rt);

}void updata(int add, int l, int r, int l, int r, int rt)

pushdown(rt, r - l + 1);

int m = (l + r) >> 1;

if(l <= m) updata(add, l, r, lson);

if(r > m) updata(add, l, r, rson);

pushup(rt);

}int main()

printf("case %d: the total value of the hook is %d.\n", cas, sum[1]);

}return

0;}

HDU 1698 線段樹區間更新

之前一直覺得自己線段樹敲得很熟練,然後。某天。是的,就是我的資料結構周開始的時候我發現。我特麼才會單點更新是怎麼回事!只會區間查詢是腫麼回事!摔!恩。就是表達一下弱渣的心情。區間更新,用到延遲操作。延遲操作應該是這麼回事。線段樹的優越性就是體現在,第一是二分查詢,第二是區間操作。當我們需要多次對區間...

hdu1698線段樹(區間更新)

題目鏈結just a hook 乙個鎖鏈,其組成成部分有三種材料,金銀銅,分數為3 2 1,每次可以更換一段的材料,求最後的分數 鉤子最多長100,000 操作最多有100,000次,肯定不能暴力 線段樹 延遲標記lazy 每個節點新增加乙個標記 lazy 每次要更新節點時,不更新到葉節點,記錄這個...

HDU 1698 線段樹(區間更新

題目鏈結 思路 今天才入門線段樹,一開始做這題還有一點懵,因為我開始的思路是區間更新時要考慮之前的狀態,比如之前的乙個需要更新的節點是鐵 1 現在再要求更新為鐵 1 則不進行更新.然後就要分很多情況去討論,很麻煩.所以另外想了乙個思路 受懶操作的啟發,我想我能不能定義乙個向下傳遞的值type 傳遞後...