hdu 4970 陣列的巧妙運用)

2021-07-07 03:10:52 字數 874 閱讀 2087

題目大意:有一些塔, 規定li, ri , di 表示殺傷力,塔在同乙個格仔只能攻擊同乙個怪獸一次, 怪獸從初始位置跑到n的位置,問有多少怪獸能夠活著;

(吐槽)一看題, 果斷線段樹送分題, 然而被騙了,o(nlogn)的演算法很難過去, 跟新的次數和查詢的次數太多了, 不過有的人用線段樹加加速輸入險過,至少我的不行;  (然後,翻題解翻題解),有o(n)的演算法,難怪作者卡線段樹了;

分析:陣列的巧妙用法, 類似線段樹延遲標記的思想,  建立乙個陣列att ,   乙個塔li , ri, di ;    att[li]+=di;     att[ri+1] -=di;  有什麼好處呢? 從左到右執行att[i] += att[i-1]; 就可以得到每個格仔的攻擊力,   這樣模擬的可以記錄下所有的值,然後直接處理最終的答案;   最後從後向前掃一次就可以求出每個格仔到結束的總攻擊力;

#include #include #include #include using namespace std;

const int maxn = 100000+10;

int n, m;

long long att[maxn];

int main()

for(int i = 2; i <= n; ++i) att[i] += att[i-1];

for(int i = n-1; i >= 1; --i) att[i] += att[i+1];

long long h, x;

int k, ans = 0;

scanf("%d", &k);

for(int i = 0; i < n; ++i)

printf("%d\n", ans);

}return 0;

}

HDU 4970樹狀陣列

差分法 作用 計算某個區間的和 步驟 1 建立cha,然後在要改變值的區間 a,b 上,cha a c,ch b c 2.從前往後 for int i 1 i n i cha i cha i 1 由前面2步,就可以得到此時i上的每個值 3 再計算sum,走到當前的sum 4 這時就可以用sum b ...

hdu 4970 樹狀陣列 「改段求段」

題意 塔防。給1 n,給出m個塔,每個塔有攻擊力,給出k個怪獸的位子和血量,問有幾隻可以到達n點。今天剛剛複習了樹狀陣列,就碰到這個題,區間更新 區間求和型別。第三類樹狀陣列可以斬。注意一下大數即可。include include includeusing namespace std int64 t...

hdu 4970 樹狀陣列 「改段求段」

題意 塔防。給1 n,給出m個塔,每個塔有攻擊力,給出k個怪獸的位子和血量,問有幾隻可以到達n點。今天剛剛複習了樹狀陣列,就碰到這個題,區間更新 區間求和型別。第三類樹狀陣列可以斬。注意一下大數即可。include include includeusing namespace std int64 t...