這是第乙個入手線段樹的區間修改的問題,區間修改本要該一整個區間包括這些結點和子結點的值,那麼會非常麻煩,這裡學習到了可以使用到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個氣球已經塗過幾次顏色了,你能幫他算出每個氣球被塗過幾次顏色嗎?...