兩種操作: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,...