樹狀陣列的運用,關鍵在於理解樹狀陣列的建立及相關操作
操作主要分四個:
一:管轄域的求解
就是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#includeint 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國都掌握的...