poj 3468 線段樹求區間和模板

2021-08-06 04:43:13 字數 1073 閱讀 7452

limit 5000ms

時間 2719ms

求區間和模板

兩個操作 : 1. 求區間和

2.區間加法

#include 

#include

#include

#define mem(a) memset(a, 0, sizeof(a))

using

namespace

std;

const

int inf = 0x3f3f3f3f;

const

int maxn =100100;

typedef

long

long ll;

ll a[maxn];

ll lazy[maxn<<2];

struct t

tree[maxn<<2];

void pushdown(int k, int d)

return ;

}void pushup(int k)

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

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

build(l, mid, k<<1);

build(mid+1, r, k<<1|1);

pushup(k);

}void update(int l, int r, int k, ll w)

pushdown(k,tree[k].r-tree[k].l+1);//先不更新, 到下一次詢問或更新時更新,左右子樹長度分別為當前長度/2和當前長度減去另一半。

int mid = (tree[k].l+tree[k].r)>>1;

if(l<=mid)

update(l, r, k<<1, w);

if(r>mid)

update(l, r, k<<1|1, w);

pushup(k);

return ;

}ll query(int l, int r, int k)

int main()}}

return

0;}

POJ 3468 線段樹區間

這個題目是第二個區間修改的線段樹了,做到現在可以發現線段樹真的非常的靈活,特別是區間修改部分,前面的單點修改其實還是也可參看模版的,區間修改就真的非常靈活了了。這個題目就是區間加法,然後求乙個累加和,同樣地也是需要乙個延遲標誌的,也就是lazy,然後還需要乙個統計當前區間的全部和的陣列。就可以輕鬆解...

POJ 3468《線段樹,區間add

題目連線 位運算 k 1 相當於 k 2 k 1 1 相當於 k 2 1 修改區間內的值,並且維護區間和。詳見 include include include using namespace std typedef long long ll const int maxn 100000 10 int ...

poj3468線段樹區間修改

題目哈。最近在隊裡的寒假作業中第一次遇到了線段樹的題,之前也聽思雨姐姐說過也看過她寫過,但自己始終沒個影響,然後自己做了幾天也算剛入這個門,會寫一些比較基礎的線段樹了,之所以把這道題寫下來是因為線段樹的精華還是在於區間修改,也是最實用的部分。線段樹的區間修改,最巧妙的部分是建立乙個lazy樹,與各個...