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

2022-05-06 22:36:10 字數 2220 閱讀 7897

樹狀陣列

例題:hdu 1556

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

輸入:每個測試例項第一行為乙個整數n,(n <= 100000).接下來的n行,每行包括2個整數a b(1 <= a <= b <= n)。 

當n = 0,輸入結束。

輸出:每個測試例項輸出一行,包括n個整數,第i個數代表第i個氣球總共被塗色的次數。

樣例:input:

3

1 12 2

3 33

1 11 2

1 30

output:

1 1 1

3 2 1

1 #include 2 #include 

3const

int maxn=110000;4

intn,c[maxn];

5int lowbit(intx)6

//計算2^k711

void update(int num,int

val)

12//

向下查詢,num是要更新的子節點,val是要修改的值

1319}20

int getsum(int

num)

21//

向上統計每個區間被染色的次數

2229

return

sum;30}

31int

main()

3245

for(int j=1;j)

4649 printf("

%d\n

",getsum(n));50}

51return0;

52 }

線段樹的寫法:

1 #include 2 #include 3 #include 4 #include 5

using

namespace

std;

6const

int maxn=100010;7

intn;

8struct

nodee[maxn<<2

];14

void build(int l,int r,int

cur)

1526

void pushdown(int

cur)

2734

return;35

}36void update(int pl,int pr,int

cur)

3743

int mid=(e[cur].l+e[cur].r)/2;44

if(pl<=mid)

45 update(pl,pr,cur<<1

);46

if(pr>mid)

47 update(pl,pr,cur<<1|1

);48}49

void update1(int

cur)

5055

pushdown(cur);

56 update1(cur<<1

);57 update1(cur<<1|1

);58}59

int query(int pl,int pr,int

cur)

6065

int mid=(e[cur].l+e[cur].r)/2;66

int ans=0;67

if(pl<=mid)

68 ans+=query(pl,pr,cur<<1

);69

if(pr>mid)

70 ans+=query(pl,pr,cur<<1|1

);71

return

ans;72}

73int

main()

7484 update1(1

);85

for(int i=1;i)

8689 printf("

%d\n

",query(n,n,1

));90}91

return0;

92 }

hdu 1166 樹狀陣列 線段樹

一道線段樹和樹狀陣列的基礎題 用樹狀陣列做 includeusing namespace std define n 50010 int size,c n int lowbit int x void modify int i,int x int sum int i return ans int mai...

hdu 1166 線段樹 樹狀陣列

剛剛做完4351的線段樹 想起當初入門的線段樹水題 於是迅速乾掉!裸裸的超標準單點更新線段樹格式 剛剛看了樹狀陣列 用來再次刷了一次這道題 下面 2012.9.24 include include include const int maxx 50000 using namespace std in...

hdu1394 線段樹 樹狀陣列

題目 就是求乙個陣列的逆序數,然後依次將陣列的第乙個數調到最後,最後求出最小的逆序數 做了兩種,線段樹和樹狀陣列 利用線段樹求逆序數 每次將數字x插到線段樹的 x 位置,然後球一下,該線段樹右邊的和,即為逆序數的個數 第一次用線段樹,做這個。include include include inclu...