計蒜客 棋子等級

2021-10-03 23:58:56 字數 1708 閱讀 3126

計蒜客 棋子等級

假定棋子的等級是左下方的棋子個數,現在給出若干棋子的位置,求不同等級的棋子各有多少個。

輸入格式

第一行乙個整數 n(1

≤n≤100000

)n (1\leq n\leq 100000)

n(1≤n≤

1000

00)接下來 n

nn 行,一行兩個整數 x,y

(0≤x

,y<

100000

)x,y (0\leq x, y < 100000)

x,y(0≤

x,y<10

0000

),表示座標。

資料保證座標先按 y

yy 排序,再按 x

xx 排序。

5

1 15 1

7 13 3

5 5

輸出格式

n

nn 行,每行乙個整數,從 0

00 到 n−1

n−1n−

1 等級的棋子數量。

121

10

因為題目保證了輸入資料的順序,所以這題就變成了裸的樹狀陣列。

為什麼這麼說呢?

當我們遇到乙個點 (x, y) 的時候,由於題目保證了先按 y 排序再按 x 排序,所以在 (x, y) 左下角的點一定都遇到過,之後的點都不可能在 (x, y) 左下角,並且,之前遇到的點都是在 (x, y) 左下角的,沒有在 (x, y) 其他方位的。

這樣一來,如果遇到乙個點 (x, y) 的時候,getsum(x)就會得到∑i=

1xci

\sum_^

∑i=1x​

ci​的和,即樹狀陣列中從 1 開始到 x 的累加值。

可以令每次change()的值為 1,這樣sum()的結果就變成了計數,即出現在 x 之前的點的個數,這個個數就是所求的棋子等級。

只需要在對應棋子等級的計數器上加 1。

ans[

getsum

(x)]++;

// 這個棋子左下的棋子個數是 getsum(x),則對應該等級的棋子個數加 1

change

(x);

// 把棋子放在這個位置

完整**如下:

計蒜客 棋子等級

座標系平面上有好多棋子,每個整點上至多有乙個棋子。假定棋子的等級是左下方的棋子個數,現在給出若干棋子的位置,求不同等級的棋子各有多少個。左下方包含正下和正右。說明 0,0 座標的位置在左下角。第一行乙個整數 n 1 n 100000 接下來 n 行,一行兩個整數 x,y 0 x,y 100000 表...

計蒜客 棋子等級 題解

座標系平面上有好多棋子,每個整點上至多有乙個棋子。假定棋子的等級是左下方的棋子個數,現在給出若干棋子的位置,求不同等級的棋子各有多少個。左下方包含正下和正左。說明 0,0 座標的位置在左下角。第一行乙個整數 n 1 leq n leq 1000001 n 100000 接下來 n 行,一行兩個整數 ...

計蒜客 2019計蒜之道D

題意 現在給定你乙個字串 s ss 以及乙個整數 k kk,請求出 s ss的字典序最小的長度為 k kk的子串行。資料範圍 0 s 5000000 00 s 5000 000 樣例輸入 helloworld 5樣例輸出 ellld思路 假如我們先不考慮長度為k的限制我們應當怎麼做?我們以樣例為例子...