線段樹區間更新 Color the ball

2021-08-02 10:10:26 字數 916 閱讀 3861

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

3

1 12 2

3 33

1 11 2

1 30

sample output

1 1 1

3 2 1

這還是模板題
pushdown的作用就是相當於把父節點的值分發給兩個子節點
每次不符合 所以往下一層就夠了
#include #include#includeusing namespace std;

const int maxn=100005;

int sum[maxn*4];

struct node

tree[maxn*4];

void build(int i,int l,int r)

tree[i].val=tree[i*2].val+tree[i*2+1].val;

}int query(int i,int l,int r)

int main()

for(int i=1;i<=k;i++)

{if(i!=k)cout<

線段樹區間更新

在此我們之前學習了線段樹的單點更新 點我 但是現在我們遇到乙個這樣的問題 給出乙個n個元素的陣列a1,a2,an。我們總共進行m次操作。每次操作為下列兩種操作其中一種 1 add l,r,v 將a l a l 1 a r 的值全部增加v。2 query l,r 計算子串行a l a l 1 a r ...

線段樹(區間更新求和)

poj 3468 include using namespace std define max 100100 struct node 求區間長度 int get dis node tree max 3 long long d max 建樹 long long build int left,int r...

線段樹之區間更新

為什麼這樣?答案是顯然的。線段樹的查詢和單點更新的時間複雜度是o logn 的,如果我每次都只是更新乙個節點,再去詢問,那麼複雜度是o nlogn 這個複雜度是可以接受的,但是如果每次操作我都是更新乙個區間,還是用單點更新去做,那麼複雜度是o n 2logn 這個複雜度是很大的,一般來說,在acm競...