hdu1968 區間更新 區間求和(線段樹)

2021-08-15 15:23:11 字數 884 閱讀 3499

這次是把某個區間全部更新為乙個值,而不是增加或減少。最後詢問一下區間總和。

思路還是差不多的。在更新時,當我們將乙個節點所維護的區間更新後,可以用這個區間的長度*新的值,即

tree[x].sum = (tree[x].r-tree[x].l+1)*tree[x].data。

在查詢或更新區間時,可以將tree[x].data作為懶惰標記繼續往下傳,最後完成push_up操作:

tree[x].sum = tree[x<<1].sum+tree[x<<1|1].sum;

#include#include#include#includeconst int maxn = 100000+5;

using namespace std;

int t,n,q,x,y,z;

struct node

}tree[maxn*4];

void getsum(int x)

void push_down(int x)

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

else

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

else

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

return ans;

}int main()

// for(int i=1;i<=n;i++)

// cout

} return 0;

}

Splay解決區間問題 區間更新,區間求和

區間更新,區間求和 注意各種編碼細節,特別是splay buildtree和 rotateto 仔細體會與線段樹解決區間問題的不同點,如結點記錄的資訊是不同的 lazy思想 include include includeusing namespace std const int maxn 11111...

hdu 1698 區間更新

基礎題 初學 include include using namespace std define lson l m rt 1 define rson m 1 r rt 1 1 const int maxn 101000 int h w n int col maxn 2 標記是否當前節點梗係 int...

hdu1698 區間更新

初寫線段樹的時候,印象最深的一道,有乙個pushdown的操作,使我的tle變成了ac 題意輸入t,然後t組資料 輸入n,m,n代表n個點上價值全是1的繩子,m代表m次操作 m行l,r,val 就是區間l,r變成val 求最後繩子總共價值 思路線段樹,懶人標記 include include inc...