HDU 1698 線段樹高階,成段更新

2021-06-12 02:37:52 字數 846 閱讀 2091

成段更新

(通常這對初學者來說是一道坎),需要用到延遲標記(或者說懶惰標記),簡單來說就是每次更新的時候不要更新到底,用延遲標記使得更新延遲到下次需要更新or詢問到的時候

#include using namespace std;

#define lson l, m, rt << 1

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

const int maxn = 111111;

int h, w, n;

int col[maxn << 2];

int sum[maxn << 2];

void pushup(int rt) //更新當前結點

void pushdown(int rt, int num) //更新子結點

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

void update(int l, int r, int c, int l, int r, int rt)

pushdown(rt, r - l + 1); //先將子節點先更新

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

if(l <= m) update(l, r, c, lson);

if(r > m) update(l, r, c, rson);

pushup(rt); //更新當前結點(上面兩句已經將左右子樹的值更新)

}int main()

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

} return 0;

}

hdu1698 線段樹成段更新

成段更新 通常這對初學者來說是一道坎 需要用到延遲標記 或者說懶惰標記 簡單來說 就是每次更新的時候不要更新到底 用延遲標記使得更新延遲到下次需要更新 or 詢問到的 時候 include include define lson l,m,rt 1 define rson m 1,r,rt 1 1 u...

hdu1698之線段樹

詳解請看 注釋 include include include include include include include include include define inf 99999999 using namespace std const int max 100000 10 sum表示區...

HDU 1698 線段樹區間修改

一道線段樹區間替換的模板題 練習一下notonlysuccess的線段樹模板 注意注意!這兩個運算符號的優先順序非常低,只要寫到就要加括號,調了兩個小時的血淚啊 include include define lson l,m,rt 1 define rson m 1,r,rt 1 1 define ...