HDU 5701 中位數計數

2022-09-03 19:24:07 字數 977 閱讀 8749

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

現在有n

'>n

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

input多組測試資料 

第一行乙個數n(n

≤8000

)'>n(n≤8000)

n(n≤8000) 

第二行n

'>n

n個數,0

≤'>0≤

0≤每個數≤109

'>≤109

≤109,

outputn

'>n

n個數,依次表示第i

'>i

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

sample input

5

1 2 3 4 5

sample output

1 2 3 2 1

解法:對於每個數字,

從該數字左邊開始掃瞄,統計個數,遇到比它小的+1,比它大的-1,遇到0,答案+1

從該數字右邊開始掃瞄,遇到比它小的-1,比它大的+1,遇到0,答案+1

然後左邊右邊的差個數相等的,乘起來,加到答案中。

**:

#includeusing namespace std;

#include#includeint a[30000];

int cs1[21000],cs2[21000];

int main()

for(int j=0;j<=2*n;j++)

ans+=(long long)cs1[j]*cs2[j];

printf("%lld",ans);

if(i!=n-1) putchar(' ');

} putchar('\n');

} return 0;

}

HDU 5701 中位數計數

中位數定義為所有值從小到大排序後排在正中間的那個數,如果值有偶數個,通常取最中間的兩個數值的平均數作為中位數。現在有n個數,每個數都是獨一無二的,求出每個數在多少個包含其的區間中是中位數。多組測試資料 第一行乙個數n n 8000 第二行n個數,0 每個數 109 n個數,依次表示第i個數在多少包含...

HDU 5701 中位數計數

這題n方可過,顯然滿足條件的區間必是含奇數個數的區間,對於每個數,先往右掃一遍,求得其右邊比其大的和比其小的數的個數的差x,然後再往 左掃一遍,求其左邊比起小的數和比起大的數的差,若乙個數在這個區間為 中位數,則若其右邊比它大的比比它小的多x 有點繞 則其左邊相反小的要 比大的多x,這樣x才能正好在...

HDU5701 中位數計數

中位數定義為所有值從小到大排序後排在正中間的那個數,如果值有偶數個,通常取最中間的兩個數值的平均數作為中位數。現在有n個數,每個數都是獨一無二的,求出每個數在多少個包含其的區間中是中位數。收起第一行乙個數n n 8000 第二行n個數,0 每個數 10 9n個數,依次表示第i個數在多少包含其的區間中...