原題:
#include #include #include #include #include #include #include #include using namespace std;#define clr(x) memset(x,0,sizeof(x))
#define ll long long
#define typec double
#define lson l , m , rt << 1
#define rson m+1 , r , rt << 1 | 1
const int n = 100000;
ll add[n<<2];
ll sum[n<<2];
void pushup(int rt)
void pushdown(int rt,int m)
}void build(int l,int r,int rt)
int m=(l + r)>>1;
build(lson);
build(rson);
pushup(rt);
}ll ans[n];
void output(int l,int r,int rt)
pushdown(rt,r-l+1);
int m=(l+r)>>1;
output(lson);
output(rson);
pushup(rt);
}void update(int l ,int r,ll c,int l,int r,int rt)
pushdown(rt,r-l+1);
int m=(l + r)>>1;
if (l<=m) update(l,r,c,lson);
if (m>1;
ll ret=0;
if (l<=m) ret+=query(l,r,lson);
if (m
區間更新,線段樹
對 l,r 進行區間更新 1 如果結點的區間被查詢區間 l,r 覆蓋,僅對該結點進行更新,並做懶標記,表示該結點被更新過,對該結點的子結點不再進行更新 2 判斷在左子樹查詢,右子樹查詢。查詢過程中,若當前節點帶有懶標記,懶標記下傳給子結點 當前結點懶標記清除,子結點更新並做懶標記 繼續查詢 3 更新...
線段樹之區間更新線段樹
在學習區間更新線段樹之間要先學習單點更新線段樹。情景引入 給乙個長度為n的陣列a,隨機修改區間陣列元素 a l a r 的值,然後求任意區間和。修改操作我們可以想到 for int i l i r i update 但是,這種方法很顯然比較費時,不夠優,所以有了今天要講的區間更新。懶惰標記 在講之前...
點更新線段樹模板
對一列數,對每次詢問輸出對應區間的和,每次修改只修改乙個數的值。定義 struct tree 由於線段樹還是相對比較平衡的,所以可以使用陣列t來儲存這棵樹,對與某個節點i,t i 2 就是左子樹,t i 2 1 就是右子樹 建樹 線段樹的思想是每個節點記錄區間的資訊,某點區間1 n,則1 n 2為其...