計蒜客 棋子等級
假定棋子的等級是左下方的棋子個數,現在給出若干棋子的位置,求不同等級的棋子各有多少個。
輸入格式
第一行乙個整數 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的限制我們應當怎麼做?我們以樣例為例子...