problem description
中位數定義為所有值從小到大排序後排在正中間的那個數,如果值有偶數個,通常取最中間的兩個數值的平均數作為中位數。
現在有 n
個數,每個數都是獨一無二的,求出每個數在多少個包含其的區間中是中位數。
input
多組測試資料
第一行乙個數 n
(n≤8000)
第二行
n 個數, 0
≤ 每個數 ≤
109,output
n 個數,依次表示第 i
個數在多少包含其的區間中是中位數。
sample input
51 2 3 4 5
sample output
1 2 3 2 1
source
solution
列舉每個數對答案的貢獻。由中位數的定義可知,對於數x,如果大於它的數和小於它的數的差值為0,則x為中位數。
基於這樣的思路,我們就可以對差值進行計數。比如如果當前的差值為-1,那麼找差值為1的區間,這樣合起來差值為
0。思路出來,接下來就是**的設計。優美的**設計能讓我們少debug,早ac~~。
通過列舉陣列中每乙個數的左右兩段區間。至於如何對差值進行計數,可以參考我的**。
program
**鏈結
中位數計數
中位數定義為所有值從小到大排序後排在正中間的那個數,如果值有偶數個,通常取最中間的兩個數值的平均數作為中位數。現在有n個數,每個數都是獨一無二的,求出每個數在多少個包含其的區間中是中位數。input 第一行乙個數n n 8000 第二行n個數,0 每個數 10 9output n個數,依次表示第i個...
中位數的中位數
參照王曉東的演算法設計 中位數的中位數,即將一串數分成n段,求其排好序了的中間那個數,再把這些所有中位數再求一次中位數。for int i 0 i r p 4 5 i 找中位數的中位數,r p 4即上面所說的n 5 int x lineselect a,p,p r p 4 5,r p 4 10 線性...
HDU 5701 中位數計數
中位數定義為所有值從小到大排序後排在正中間的那個數,如果值有偶數個,通常取最中間的兩個數值的平均數作為中位數。現在有n個數,每個數都是獨一無二的,求出每個數在多少個包含其的區間中是中位數。多組測試資料 第一行乙個數n n 8000 第二行n個數,0 每個數 109 n個數,依次表示第i個數在多少包含...