天空中有一些星星,這些星星都在不同的位置,每個星星有個座標。
如果乙個星星的左下方(包含正左和正下)有 k 顆星星,就說這顆星星是 k 級的。
例如,上圖中星星 5 是 3 級的(1,2,4 在它左下),星星 2,4 是 1 級的。
例圖中有 1 個 0 級,2 個 1 級,1 個 2 級,1 個 3 級的星星。
給定星星的位置,輸出各級星星的數目。
換句話說,給定 n 個點,定義每個點的等級是在該點左下方(含正左、正下)的點的數目,試統計每個等級有多少個點。
輸入格式
第一行乙個整數 n,表示星星的數目;
接下來 n 行給出每顆星星的座標,座標用兩個整數 x,y 表示;
不會有星星重疊。星星按 y 座標增序給出,y 座標相同的按 x 座標增序給出。
輸出格式
n 行,每行乙個整數,分別是 0 級,1 級,2 級,……,n−1 級的星星的數目。
資料範圍
1≤n≤15000,
0≤x,y≤32000
輸入樣例:
51 1
5 17 1
3 35 5
輸出樣例:12110
#include
#include
#include
#include
using
namespace std;
const
int n =
32010
;int n;
int level[n]
,tr[n]
;int
lowbit
(int x)
void
add(
int x,
int v)
intquery
(int x)
intmain()
for(
int i =
0; i < n; i ++
)return0;
}
數星星 樹狀陣列
題目描述 天空中有一些星星,這些星星都在不同的位置,每個星星有個座標。如果乙個星星的左下方 包含正左和正下 有 k 顆星星,就說這顆星星是 k 級的。例如,上圖中星星 5 是 3 級的 1,2,4 在它左下 星星 2,4 是 1 級的。例圖中有 1 個 0 級,2 個 1 級,1 個 2 級,1 個...
1265 數星星 樹狀陣列
思路 因為給定的座標已經按照縱座標排好序了,那麼對於每個點 x,y 它是第幾層取決於它左下部有多少個點,因為他的縱座標是最大的,那麼我們就利用樹狀陣列求出字首和s 每次在x位置處,單點修改此點的值 1 即第s層的星星數 1。再把這個點放入樹狀陣列中即可。include include define ...
數星星(樹狀陣列的應用)
1265.數星星 天空中有一些星星,這些星星都在不同的位置,每個星星有個座標。如果乙個星星的左下方 包含正左和正下 有 k k k 顆星星,就說這顆星星是 k k k 級的。例如,上圖中星星 5 5 5 是 3 3 3 級的 1,2 4 1,2,4 1,2,4 在它左下 星星 2,4 2,4 2,4...