Stars POJ 2352(樹狀陣列)

2021-08-19 21:06:24 字數 821 閱讀 5777

輸入點的座標,記錄乙個點的相關值,相關值定義為橫縱座標都小於等於這一點的點的個數,最後輸出的時候,輸出n行,第i行是相關值是i-1的點的個數,輸入保證y座標遞增,y相同情況下,x座標遞增

分析:首先由於輸入資料具有遞增型,可以不儲存資料,來乙個分析乙個,而且由於y是遞增的,所以後加入的點在y方向上就不用再檢查是否滿足條件了,也就是說我們只用看當前點的x座標之前(包括x)的點的個數就可以了,這就具有了樹狀陣列的求區間和的需要。每輸入乙個點,考察它的x座標,即計算getsum(x),getsum(x)就是這個點的相關值,只需把sum[getsum(x)]++,就是把相關值為getsum(x)的點數++,計算完了之後,再add(x),即x這一座標的點再加乙個,如此往復,最後輸出sum即可

但是!!!注意x可以從0開始……樹狀陣列是處理不了add(0)的,所以輸入x以後要x++

**:

#include#includeusing namespace std;

#define mem(a) memset(a,0,sizeof(a))

#define up(i,x,y) for(int i=x;i<=y;i++)

#define down(i,x,y) for(int i=x;i>=y;i--)

const int num=32000;

int c[num+10],sum[num+10];

void add(int i)

}int getsum(int i)

return s;

}int main()

up(i,0,n-1)

} return 0;

}

poj 2352 數星星 樹狀陣列

題意 給星星們的座標。求在星星左下方的星星有幾顆。有幾顆就是幾級星星。最後將他們從0級到n 1級的個數輸出。解析 題目已經將其按照y排序了,然後按照x乙個乙個往樹狀陣列裡面加,然後詢問就行了。注意先詢問,更新完ans,再去更新樹狀陣列,因為先更新樹狀陣列的話會把本身就直接加上了。include in...

poj 2352 樹狀陣列

這道題好像被賤做了,看起來像二維的樹狀陣列,其實只是一維的,可能是資料太大了,矩陣開不那麼大,因為題意是求乙個矩陣中做它左下部分的個數,而去輸入的順序是按y公升序,後x公升序輸入。其實如果不按這個順序可以下排序。然後就是一維的樹狀陣列的思路了。轉個圖,可以知道它的這陣列性質了 include inc...

poj 2352 樹狀陣列

第一次做樹狀陣列的題,還是遇到了一點小麻煩,吃一塹長一智。對於樹狀陣列來說,下標不能從0開始,否則就死迴圈了。因為0 lowbit 0 0 就死迴圈下去了。其他的就沒什麼了,其實這道題就看x值,而且題意還給排好序了。直接計算就ok了。如下 include include include includ...