傳送門:
題目描述:給定若干個二維平面上 的點,如果a.x<=b.x&&a.y>=b.y則說a的等級比b高(如果a==b,則他們等級相同),要求對於每個點,輸出比他等級高的點的總數。
解題思路:把星星按照y的遞減序和x的遞增序排序,然後對x軸建立樹狀陣列,依次將每個星星插入樹狀陣列(在插入前統計出1-當前座標和區間和,記錄下來),然後再把相同的星星的記錄下來的資料換成他們之中第乙個被插入樹狀陣列的星星的值,即可,注意,需要離散化(即前面說的樹狀陣列是在離散化後的x軸下建立起來的)
各種蛋疼:
1.如果比較函式不加最後的那句idx2.開始沒看到(如果a==b,則他們等級相同)..
第乙個問題比較蛋疼,以後需要注意!
**:#include#include#include#includeusing namespace std;
const int maxn = 111111;
struct starelse if(x!=s.x)
return s;
}void add(int pos)
}int main(){
while(scanf("%d",&n)!=eof){
memset(c,0,sizeof(c));
m = 0;
for(int i=0;i
數星星 樹狀陣列
題目描述 天空中有一些星星,這些星星都在不同的位置,每個星星有個座標。如果乙個星星的左下方 包含正左和正下 有 k 顆星星,就說這顆星星是 k 級的。例如,上圖中星星 5 是 3 級的 1,2,4 在它左下 星星 2,4 是 1 級的。例圖中有 1 個 0 級,2 個 1 級,1 個 2 級,1 個...
數星星(樹狀陣列)
天空中有一些星星,這些星星都在不同的位置,每個星星有個座標。如果乙個星星的左下方 包含正左和正下 有 k 顆星星,就說這顆星星是 k 級的。例如,上圖中星星 5 是 3 級的 1,2,4 在它左下 星星 2,4 是 1 級的。例圖中有 1 個 0 級,2 個 1 級,1 個 2 級,1 個 3 級的...
1265 數星星 樹狀陣列
思路 因為給定的座標已經按照縱座標排好序了,那麼對於每個點 x,y 它是第幾層取決於它左下部有多少個點,因為他的縱座標是最大的,那麼我們就利用樹狀陣列求出字首和s 每次在x位置處,單點修改此點的值 1 即第s層的星星數 1。再把這個點放入樹狀陣列中即可。include include define ...