[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國在海岸線沿...