HDU 1166 敵兵布陣 樹狀陣列 入門

2021-07-05 07:21:09 字數 799 閱讀 1974

[hdu 1166]敵兵布陣[樹狀陣列][入門]

題意分析:

查詢區間敵兵數。

解題思路:

模板題啦,可以用各種方法過。這裡當做樹狀陣列入門。

推薦一篇博文來入門:

博文的第二部分就是關於樹狀陣列的。

個人感受:

整個樹狀陣列我覺得最需要抓住的是sum陣列是儲存著什麼這個核心。

明白了sum陣列儲存著什麼,由這個定義進而衍生出的函式lowbit,單點更新,都能輕鬆理解了。

具體細節看看**吧,加了點注釋。

具體**如下:

#include#include#includeconst int maxn = 5e4 + 111;

int a[maxn], sum[maxn], n; // sum[i]中儲存的是其管轄的從i ~ i-2^k + 1的數的和(k是到第乙個1為止0的個數)

int lowbit(int x) // 返回二進位制從右往左第乙個1代表的數。

void init(int n) // 初始化(這樣初始化可以避免對sum陣列的初始化eg. memset(sum, 0, sizeof sum)這一步就可以省掉了)

}}int getsum(int x) // 整個原理就是將x按1的個數區分成段,將每段和相加

return res;

}void add(int x, int val) // 和getsum同理,不斷更新每個段的值

}int main()

}return 0;

}

HDU 1166 敵兵布陣 樹狀陣列

用樹狀陣列很簡單,太晚了,貼下 睡覺去。另,研究線段樹的時候,發現網上流傳著有幾種不同的線段樹,最正宗的是以單位區間為單位,只能處理線段 另外還有幾種葉子結點是點的,這種也可以用來處理點,所以這題是可以用這種線段樹做的。還搞不太清楚它們之間的關係。mark一下,明天再說。include includ...

HDU 1166 敵兵布陣 樹狀陣列

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

HDU 1166 敵兵布陣 (樹狀陣列)

敵兵布陣 time limit 1000msmemory limit 32768kb64bit io format i64d i64u submit status description c國的死對頭a國這段時間正在進行軍事演習,所以c國間諜頭子derek和他手下tidy又開始忙乎了。a國在海岸線沿...