POJ3468線段樹區間修改模板題

2021-08-20 12:56:31 字數 1260 閱讀 9053

題意

n個數m個操作

1~n的值

兩種操作:

「q  a  b查詢區間[a,b]值的和

「c  c  a  b」區間[a,b]每個值加c

輸出每次查詢的值

**

#include #include #include #include #include #include #include #include #include #include #include //ios_base::sync_with_stdio(false);

//#include using namespace std;

#define lson l,m,rt<<1

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

typedef long long ll;

const int n = 1e5+10;

ll sum[n<<2],add[n<<2];

struct node

}tree[n<<2];

void pushup(int rt) //回溯時把左右孩子的值帶上來

void pushdown(int rt, int m) //只傳遞給左右孩子

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

int m = tree[rt].mid();

build(lson);

build(rson);

pushup(rt);

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

if(tree[rt].l == tree[rt].r) return;

pushdown(rt,tree[rt].r-tree[rt].l+1);

int m = tree[rt].mid();

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

else if(l > m) update(c,l,r,rt<<1|1);

else

pushup(rt);

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

return res;

}int main()

else }}

return 0;

}

poj3468線段樹區間修改

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

POJ 3468 線段樹區間

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

POJ 3468 線段樹區間修改,區間求和

由於是區間求和,因此我們在更新某個節點的時候,需要往上更新節點資訊,也就有了tree root val tree l root val tree r root val 但是我們為了把懶標記打上,當節點表示的區間是完全被詢問區間包含,那麼這個區間的資訊都是有用的,因此我們其實只需要把這個節點更新,並打...