hdu1689 線段樹成段更新

2021-06-22 20:48:03 字數 1041 閱讀 1308

兩種操作:1、set區間[a,b]上數字為v;2、查詢[ 1 , n ]上的sum

**如下:

#include#include#include#include#include#include#include#include#include#include#include#include#define n 100005

#define inf 0x7ffffff

#define eps 1e-9

#define pi acos(-1.0)

#define p system("pause")

using namespace std;

int res;

struct node

tree[4*n];

void build(int o,int l,int r)//初始化所有的數字為1

void pushdown(int o)//-1表示顏色是雜色,如果修改區域不一樣,則先將其子區域置為父值,對子區域進行操作

}void update(int o,int x,int y,int v)//將區間[x,y]上的數字設定為v

pushdown(o);

int m = (tree[o].l+tree[o].r)/2;

if(x <= m) update(2*o,x,y,v);

if(y > m) update(2*o+1,x,y,v);

}void query(int o,int x,int y)//查詢區間[x,y]上的sum

int m = (tree[o].l + tree[o].r)/2;

if(x <= m) query(2*o,x,y);

if(y > m) query(2*o+1,x,y);

}int main()

res = 0;

query(1,1,n);

printf("case %d: the total value of the hook is %d.\n",z++,res);

}return 0;

}

hdu1698 線段樹成段更新

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

線段樹(單點更新and成段更新)

線段樹需要的空間。區間為1 n 假設是一棵完全二叉樹,且樹高為i。完全二叉樹性質 第i層最多有2 i 1 個結點。那麼 2 i 1 n i log2 n 1 共有 2 i 1 個結點,即 2 log2 n 1 1個結點 即2 2 log2 n 1 2 n 1 但這是建立樹是完全二叉樹的情況下。但是如...

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

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