HDU 1556線段樹區間修改

2021-07-16 22:16:52 字數 909 閱讀 1703

這是第乙個入手線段樹的區間修改的問題,區間修改本要該一整個區間包括這些結點和子結點的值,那麼會非常麻煩,這裡學習到了可以使用到laze陣列先記錄下需要修改的次數,然後等到查詢的時候一步步對子節點進行傳遞和修改塗色次數tre值和子結點的laze陣列的值。學習了該部落格: 

#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,a,b;

int tre[maxn<<2],laz[maxn<<2];

void pushdown(int rt)

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

pushdown(rt);

mid;

if(x<=m)

update(lson,x,y);

if(y>m)

update(rson,x,y);

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

pushdown(rt);

mid;

if(x<=m) return query(lson,x);

else return query(rson,x);

}int main()

{ while(scanf("%d",&n)!=eof)

{if(n==0)

break;

memset(tre,0,sizeof(tre));

memset(laz,0,sizeof(laz));

for(int i=0;i

hdu 1556 初級線段樹

include include include define max 100005 define mid l r 1 define lson l,m,rt 1 define rson m 1,r,rt 1 1 using namespace std int n struct tree tree tr...

hdu 1556 簡單線段樹

漢語題,不解釋 思路 此題是線段樹的染色,先分段染色,可以nlogn級別,在算出每個位置的染色數 求染色數的時候,有兩種方法 1,用乙個數記錄step的值,之後除以2,把每個值相加,直到為一時結束 為從下向上尋找 2,用遞迴,從上往下尋找 下面是我的2 include include include...

樹狀陣列 or 線段樹 (HDU 1556)

樹狀陣列 例題 hdu 1556 n個氣球排成一排,從左到右依次編號為1,2,3.n.每次給定2個整數a b a b lele便為騎上他的 小飛鴿 牌電動車從氣球a開始到氣球b依次給每個氣球塗一次顏色。但是n次以後lele已經忘記了第i個氣球已經塗過幾次顏色了,你能幫他算出每個氣球被塗過幾次顏色嗎?...