POJ 3468 線段樹區間

2021-07-16 22:53:43 字數 1208 閱讀 4501

這個題目是第二個區間修改的線段樹了,做到現在可以發現線段樹真的非常的靈活,特別是區間修改部分,前面的單點修改其實還是也可參看模版的,區間修改就真的非常靈活了了。

這個題目就是區間加法,然後求乙個累加和,同樣地也是需要乙個延遲標誌的,也就是lazy,然後還需要乙個統計當前區間的全部和的陣列。就可以輕鬆解決了。

再次暫記一筆,線段樹的基本操作都已經學習過了,然後更加高深區間合併、掃瞄線、以及其他的暫時先不練習了,誰叫我時間有限呢。(需要練習其他的專題啊。0.0!)

#include#include#includeusing namespace std;

#define lson l, m, rt<<1

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

#define mid int m = (l + r)>>1

const int maxn=100010;

int n,q,x,y,z;

int a[maxn];

long long ci[maxn<<2];

long long add[maxn<<2];

char s[5];

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

mid;

build(lson);

build(rson);

add[rt]=add[rt*2]+add[rt*2+1];

}void update(int l,int r,int rt,int x,int y,int z)

mid;

if(ci[rt]!=0)

if(x<=m)

update(lson,x,y,z);

if(y>m)

update(rson,x,y,z);

add[rt]=add[rt*2]+add[rt*2+1];

}long long query(int l,int r,int rt,int x,int y)

mid;

if(ci[rt]!=0)

long long ans=0;

if(x<=m) ans+=query(lson,x,y);

if(y>m) ans+=query(rson,x,y);

return ans;

}int main()

else if(s[0]=='q')}}

return 0;

}

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樹,與各個...

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

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