n個氣球排成一排,從左到右依次編號為1,2,3…n.每次給定2個整數a b(a <= b),lele便為騎上他的「小飛鴿"牌電動車從氣球a開始到氣球b依次給每個氣球塗一次顏色。但是n次以後lele已經忘記了第i個氣球已經塗過幾次顏色了,你能幫他算出每個氣球被塗過幾次顏色嗎?
input
每個測試例項第一行為乙個整數n,(n <= 100000).接下來的n行,每行包括2個整數a b(1 <= a <= b <= n)。
當n = 0,輸入結束。
output
每個測試例項輸出一行,包括n個整數,第i個數代表第i個氣球總共被塗色的次數。
sample input
31 1
2 23 3
31 1
1 21 3
0sample output
1 1 1
3 2 1
思路:以氣球的數顏色覆蓋次數建樹,其實建樹的那一步都時省去了。線段樹的區間更新,本題算比較特殊吧,最後要求的輸出的每個氣球上色次數,實質上進行的就是x和y相同的區間查詢。
#include
#include
#define ll long long
#define n 100010
int add[
4*n]
,n,ans;
//ans 用來表示每個氣球的上色次數
void
pushdown
(int k)
}void
update
(int k,
int l,
int r,
int x,
int y)
pushdown
(k);
int mid=l+r>>1;
if(x<=mid)
update
(k<<
1,l,mid,x,y);if
(midupdate
(k<<1|
1,mid+
1,r,x,y);}
void
query
(int k,
int l,
int r,
int x)
pushdown
(k);
int mid=l+r>>1;
if(x<=mid)
query
(k<<
1,l,mid,x)
;else
query
(k<<1|
1,mid+
1,r,x);}
intmain()
for(i=
1;i<=n;i++
)printf
("\n");
}return0;
}
線段樹區間更新 Color the ball
n個氣球排成一排,從左到右依次編號為1,2,3.n.每次給定2個整數a b a b lele便為騎上他的 小飛鴿 牌電動車從氣球a開始到氣球b依次給每個氣球塗一次顏色。但是n次以後lele已經忘記了第i個氣球已經塗過幾次顏色了,你能幫他算出每個氣球被塗過幾次顏色嗎?input 每個測試例項第一行為乙...
樹狀陣列 Color the ball
n個氣球排成一排,從左到右依次編號為1,2,3.n.每次給定2個整數a b a b lele便為騎上他的 小飛鴿 牌電動車從氣球a開始到氣球b依次給每個氣球塗一次顏色。但是n次以後lele已經忘記了第i個氣球已經塗過幾次顏色了,你能幫他算出每個氣球被塗過幾次顏色嗎?input 每個測試例項第一行為乙...
樹狀陣列 Color the ball
n個氣球排成一排,從左到右依次編號為1,2,3.n.每次給定2個整數a b a b lele便為騎上他的 小飛鴿 牌電動車從氣球a開始到氣球b依次給每個氣球塗一次顏色。但是n次以後lele已經忘記了第i個氣球已經塗過幾次顏色了,你能幫他算出每個氣球被塗過幾次顏色嗎?input 每個測試例項第一行為乙...