中位數計數

2021-07-12 03:05:53 字數 715 閱讀 6085

problem description

中位數定義為所有值從小到大排序後排在正中間的那個數,如果值有偶數個,通常取最中間的兩個數值的平均數作為中位數。

現在有 n

個數,每個數都是獨一無二的,求出每個數在多少個包含其的區間中是中位數。

input

多組測試資料

第一行乙個數 n

(n≤8000)

第二行

n 個數, 0

≤ 每個數 ≤

109,output

n 個數,依次表示第 i

個數在多少包含其的區間中是中位數。

sample input

5

1 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個數在多少包含...