線段樹模板

2021-09-21 01:44:30 字數 2719 閱讀 5708

區間查詢,區間修改(+,*)

貼個模板(上課去了……)╮(╯▽╰)╭

#include #define ll long long

#define max 100002

using namespace std;

ll a[max];

ll p;//取摸的

/*放裡面編譯器提示段錯誤所以把下面三行從struct拿出來了*/

ll sum[max << 2];

ll lazy_add[max << 2];

ll lazy_mulv[max << 2];

struct sgt

//下void pushdown(int o,int l,int r,int mid,int lson,int rson)

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

}//區間更新 [a,b]+x;

void update_add(int o, int l, int r, int a, int b, int x)

else

}void update_multi(int o,int l,int r,int a,int b,int x)

else

}//區間查詢

ll query(int o,int l,int r,int a,int b)

}};int n, m, q;

int x, y, k;

int main()

if(q==2)

else if(q==3)

}return 0;

}

一般的線段樹操作,單點修改,單點查詢,區間修改,區間查詢  (加,減)

#include #define ll long long

#define max 50002

using namespace std;

int n,p,a,b,m,x,y,ans;

struct node

tree[max<<2];

//建樹

inline void build(int k,int l,int r)

int mid=(l+r)/2;

build(k*2,l,mid);

build(k*2+1,mid+1,r);

tree[k].w=tree[k*2].w+tree[k*2+1].w;

}//標記下傳

inline void down(int k)

//單點查詢

inline void ask_point(int k)

if(tree[k].f) down(k);

int mid=(tree[k].l+tree[k].r)/2;

if(x<=mid) ask_point(k*2);

else ask_point(k*2+1);

}//單點修改

inline void change_point(int k)

if(tree[k].f) down(k);

int mid=(tree[k].l+tree[k].r)/2;

if(x<=mid) change_point(k*2);

else change_point(k*2+1);

tree[k].w=tree[k*2].w+tree[k*2+1].w;

}//區間查詢

inline void ask_interval(int k)

if(tree[k].f) down(k);

int mid=(tree[k].l+tree[k].r)/2;

if(a<=mid) ask_interval(k*2);

if(b>mid) ask_interval(k*2+1);

}//區間修改

inline void change_interval(int k)

if(tree[k].f) down(k);

int mid=(tree[k].l+tree[k].r)/2;

if(a<=mid) change_interval(k*2);

if(b>mid) change_interval(k*2+1);

tree[k].w=tree[k*2].w+tree[k*2+1].w;

}int main()

else if(p==2)

else if(p==3)

else

}return 0;

}

hdu-1754 (區間最大值)

#include #define ll long long

#define max 200002

using namespace std;

int n,p,a,b,m,x,y,ans,maxx;

struct node

tree[max<<2];

//標記下傳

inline void down(int k)

//建樹

inline void build(int k,int l,int r)

int mid=(l+r)/2;

build(k*2,l,mid);

build(k*2+1,mid+1,r);

down(k);

}//單點修改

inline void change_point(int k) } }

return 0;

}

線段樹模板(模板)

參考部落格 持續更新。外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳 img xhrgdjcd 1613976863463 區間儲存在陣列中的下標對應為 12 3 4 5 6 7 8 9 10 11 12 13 14 15 四部分單點更新 根據題目的要求編寫自己的pushup,query...

線段樹模板

include include include using namespace std const int size 10010 struct node the node of line tree class linetree void updatem void updateline public ...

線段樹模板

單點更新,區間求最值 include include include include include define n 222222 using namespace std int num n struct tree tree n 4 void push up int root void build...