這道題告訴我們若干顆星星的座標,告訴我們的時候y座標已經按照公升序排列了。對於每一顆星,它的等級數等於它左邊和左上角星星的顆數。最後問每一顆星星的等級。
把星星按照給我們的順序(就是y座標從小到大的順序),依次把乙個陣列中下標為x的元素加1。對於某一顆星,座標為x,那麼把陣列中下標為x及之前的所有元素相加,就是求了這顆星左邊及左上角的星星數,然後再把下標為x的元素加1。(這顆星星本身不能算進去)
#include#include#include#include#define n 32005
using namespace std;
int n, c[n], level[n];
int lowbit(int x)
int query(int x)
return sum;
}int add(int i, int d)
}int main()
for (int i = 0; i < n; i++)
printf("%d\n", level[i]);
}return 0;
}
HDOJ 1541 樹狀陣列
題目 題意 給一組星星,每顆星星左下角有多少個星星他就是多少級。然後輸出沒級星星個數。題目按y公升序。所以只要考慮x。因為x,y的範圍不大。只有32000,所以可以建立樹狀陣列了。include define pi 3.1415926 define inf 1e18 define inf 1e9 d...
樹狀陣列 HDOJ 1541 Stars
剛開始一點都不覺得是樹狀陣列。有很長一段時間覺的排個序就行了。直到重新讀題發現輸入是按順序的。不過值得注意的是輸入的x,y可能是0,但是在樹狀陣列中是不能為0的。最後加上乙個十分酷炫 喪心病狂 的輸入優化,直接跑第一面了。include include include include include...
hdu1541(線段樹的巧用)
線段樹的妙用,求乙個序列中的某個數字的前面有幾個比它小,樸素演算法是o n n 線段樹是o n logn 然後再變形下就是答案了 下面提供線段樹和樹狀陣列的解題 線段樹 include include include include include include include include i...