樹狀陣列 POJ 2352 Stars

2021-08-19 21:40:02 字數 845 閱讀 7426

m<=

15000

m

<=

15000

顆星星,若前面的星星比它矮(或者一樣高),我們說它的等級+1,求各個等級星星的數量

樹狀陣列 用a

nsa ns

陣列儲存各個等級的數量

c c

陣列為樹狀陣列,假設一顆星星高度為

x' role="presentation" style="position: relative;">x

x,那麼需要考慮

0 0

到x' role="presentation" style="position: relative;">x

x高度的星星的個數即為它的等級,(因為前面已經說過

y y

是不降序列,所以可以不用考慮

y' role="presentation" style="position: relative;">y

y)有點類似於字首和。

#include

#define lb(i) i&-i//lowbit函式

using

namespace

std;int x,y,m;

const

short n=32002;//高度最高這麼高

int c[n],ans[15001];

void add(int i)//放入某個星星

int sum(int i)//求出高度在0到x間有多少顆星星

int main()

for(int i=0;iprintf("%d\n",ans[i]);//輸出

}

poj 2352 樹狀陣列

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

poj 2352 樹狀陣列

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

poj2352 樹狀陣列

題意 求0 n級別的星星的個數 以每乙個星星為原點建立平面直角座標系,在當前座標系第三象限的星星的個數看做乙個星星的級別數 include include include include include include include include include include using na...