資料結構(樹狀陣列)HDU1166

2022-05-17 17:37:44 字數 697 閱讀 8433

樹狀陣列的運用,關鍵在於理解樹狀陣列的建立及相關操作

操作主要分四個:

一:管轄域的求解

就是2的k次方,有公式:cn=a(n-a^k+1)+.........+an(其中 k 為 n 的二進位制表示中從右往左數的 0 的個數)。

則可以用函式lowbit(n)直接求出

二,單個數的調整

當有乙個數發生改變時,管轄到它的數也要做相關的調整

三,求和

將管轄到的數加上未管轄到的數

四,建樹

有公式:

c[i]=sum[i]-sum[i-lowbit(i)];i從1開始

#include#include

int a[50010],c[50010

];int lowbit(int

x)int sum(int

x)

return

sum;

}void change(int i,int x,char *s,intn)}

intmain()

printf(

"case %d:\n

",j++);

while(scanf("

%s",key),strcmp(key,"

end"

))

else}}

return0;

}

樹狀陣列 HDU1166

繼續上次那題,我們現在採用樹狀陣列來解。樹狀陣列主要用來進行區間求和統計和定點更新操作,樹狀陣列的儲存是如下方式的 假設陣列a為a 1 a 2 a 3 a n 現在我們另陣列c 1 a 1 c 2 a 1 a 2 c 3 a 3 c 4 a 1 a 2 a 3 a 4 這是啥結構呢?其實c i a ...

樹狀陣列 HDU1166

題意為 t組測試陣列,跟著乙個整數n,n n 50000 表示n個營地 n後面跟著n個數ai 1 50 表示每個營地人數。然後輸入三種操作 最多有40000條操作 1.add x y x營地增加y人。2.query x y 查詢x y營地的總人數。3.sub x y x營地減少y人。end 結束。如...

Hdu1166 樹狀陣列

problem description c國的死對頭a國這段時間正在進行軍事演習,所以c國間諜頭子derek和他手下tidy又開始忙乎了。a國在海岸線沿直線布置了n個工兵營地,derek和tidy的任務就是要監視這些工兵營地的活動情況。由於採取了某種先進的監測手段,所以每個工兵營地的人數c國都掌握的...