hdu1541 Stars(樹狀陣列 解釋)

2021-07-11 11:52:59 字數 781 閱讀 6820

題意:有n個星星,輸入時是以從下到上,從左到右的方式輸入(x,y)的值。每個星星左下方有多少個星星就評多少等級,求0~n-1個等級分別有多少個星星。

思路:樹狀陣列入門題,第二次做。首先上部落格,這篇寫的很好,看完就懂了。樹狀陣列主要用的是二進位制思想,相比於普通陣列在更新和求和上從o(n)優化到了o(n-1)。

本題要求的是每個星星左下方有多少個星星,因為後遍歷的肯定是上方,所以只需求出左邊有多少個星星。這樣我們把每個星星量化為乙個,求左邊有多少星星就是求和。這裡每組最多15000個星星,還有多組,普通陣列耗時過多。這樣就用到了樹狀陣列。樹狀陣列那個大牛解釋的很好了,不過為了鞏固還是要寫些注釋。

這裡我把每個lowbit換成了組的說法。

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

typedef long long ll;

const int n = 32001;

int tree[n];//從當前元素開始連續往左求lowbit(x)個數的和

int level[n];//儲存等級

int lowbit(int x)

void add(int x)//更新

}int sum(int x)

return rankk;

}int main()

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

printf("%d\n", level[i]);

}return 0;

}

hdu 1541 Stars 樹狀陣列

題意 大概就是計算每顆星星左下邊包括了多少顆星星,這個數值就是level。左下邊不包括本身,不超過本身的x,y的座標,可以等於。問每種level有多少顆星星。這題,一開始想不到怎麼用到樹狀陣列,後來看了一下,發現題目給的資料是已經按x,y排好序的。所以我們可以不用管y的值,為什麼呢?我們乙個星星乙個...

HDU 1541 Stars(樹狀陣列)

題目鏈結 解析 題意 大概就是計算每顆星星左下邊包括了多少顆星星,這個數值就是level。左下邊不包括本身,不超過本身的x,y的座標,可以等於。問每種level有多少顆星星。這題,一開始想不到怎麼用到樹狀陣列,後來看了一下,發現題目給的資料是已經按x,y排好序的,所以我們可以不用管y的值。注意 1....

HDU 1541 Stars 樹狀陣列

題義為給定n個點按照先x軸,後y軸座標排序,求某一點的左下角的星星數量,剛開始用二維的樹狀陣列來做,結果肯定是記憶體不過用。該題正解為在給定的座標點的排序後,只對x軸座標建立乙個一維陣列,對於當前狀態按x軸將平面劃分成m個區域,由於給定的點的y軸座標一定是當前最高的,所以直接對橫座標前求和即可。如下...