這個題目是第二個區間修改的線段樹了,做到現在可以發現線段樹真的非常的靈活,特別是區間修改部分,前面的單點修改其實還是也可參看模版的,區間修改就真的非常靈活了了。
這個題目就是區間加法,然後求乙個累加和,同樣地也是需要乙個延遲標誌的,也就是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 但是我們為了把懶標記打上,當節點表示的區間是完全被詢問區間包含,那麼這個區間的資訊都是有用的,因此我們其實只需要把這個節點更新,並打...