HDU 1541 Stars(樹狀陣列)

2021-06-23 06:57:27 字數 750 閱讀 4529

題目鏈結

解析

題意:大概就是計算每顆星星左下邊包括了多少顆星星,這個數值就是level。左下邊不包括本身,不超過本身的x,y的座標,可以等於。問每種level有多少顆星星。

這題,一開始想不到怎麼用到樹狀陣列,後來看了一下,發現題目給的資料是已經按x,y排好序的,所以我們可以不用管y的值。

注意:1.每次輸入乙個座標對之後,都要計算一下這個它的level。

2.此題的x座標可以為0,而樹狀陣列是從1開始的,所以處理的時候對每個x座標進行加一即可。輸出從level=0,開始。

**

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

const int maxn=32005;

#define lowbit(x) ((x)&(-(x)))

int a[maxn], c[maxn];

void add(int p, int val)

return sum;

}int main(){

int n;

while(~scanf("%d", &n)){

int i,x,y;

memset(a, 0, sizeof(a));

memset(c, 0, sizeof(c));

for(i=0; i

hdu 1541 Stars 樹狀陣列

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

HDU 1541 Stars 樹狀陣列

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

hdu1541 Stars 樹狀陣列

有n個點 xi,yi 輸入時保證按y公升序,即先按y小的輸入,y相同時按x公升序輸入 如果對於 xi,yi 來說,位於x yi y yi區域的點有ki個 則level ki 最終輸出level 0 到level n 1 的值 思路 的題主忘了初始化c陣列hhhh 其實亂序的話,按加粗題排序一下也能搞...