POJ 2352 Stars 樹狀陣列

2021-08-24 23:41:10 字數 939 閱讀 6000

題目鏈結

題意:給出乙個n,然後n行,每行給出乙個星星的座標(x,y),若乙個星星a座標為(x1,y1),另乙個星星b座標為(x2,y2),且有x1>=x2&&y1>=y2,則星星a的等級+1,輸出0~n-1等級的星星的數量.

題解:我們只要先對y排序(從小到大,當y同時對x排序),每次新增乙個點的x座標時,對陣列tre[x+1]~tre[maxn]進行+1操作(加1為了避免0的情況,lowbit不存在0,樹狀陣列要避免0的出現,通常加上乙個常量即可)在每次新增前先對已新增的點進行查詢操作(類似揹包的方式,但是與揹包不同的是+1操作和查詢操作都是通過lowbit跳躍式的,節省很多時間)每次查詢對ans[查詢到比他小的x的總數]++,最終輸出ans即可~

**如下:

#include#include#include#include#include#include#include#include#includeusing namespace std;

#define maxn 50005

struct node

inline int lowbit(int x)//獲得二進位制最低位1的值 eg:6(110) =》 lowbit(6)= 2 (010)

void add(int pos, int elem)//a[pos]+=elem ,對應的所有tre[pos]+=elem }

int gets(int pos)//獲得該tre[pos]的值

return ans;

} int find(int l, int r) //獲得區間[l,r]的資料和

}f;int main()

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

} return 0;

}

樹狀陣列 poj2352 Stars

stars 題目 題意 在乙個二維陣列中統計某個等級星星的個數,星星的等級為不比此星星高且不在它右邊範圍內的星星個數。題解 因為輸入的資料已經排序,只要一邊接收輸入一邊計算等級即可。include includeusing namespace std int a 15005 c 32010 defi...

poj 2352 Stars(樹狀陣列)

題意 依次給出n個星星的座標 y座標以非遞減的順序輸入 對於每個星星,她的等級等於她左下方的星星的個數和 包括邊界上的星星 要求輸出等級0到等級n 1的星星的個數。0 x,y,32000,1 n 15000 設x i 表示橫座標為i的星星有多少顆,那麼對於乙個單一詢問 星星 k,y 的等級是多少?要...

poj 2352 Stars 樹狀陣列

我的第一道樹狀陣列哇咔咔 大一的時候怎麼都看不懂,也許我當時太不用心了吧。題意 給一些點的座標,每個點的level是看比它高度低且不在它右邊的點的個數。演算法 由於此題座標本來就是按y值從小到大,x值從小到大排列的。所以樹狀陣列中存座標為x的點的個數。每次讀入只要找1 x的sum,然後更新數量 1即...