51Nod 1682 中位數計數

2021-09-05 03:55:12 字數 1081 閱讀 5810

個人部落格→tanjx的自留地

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

現在有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

題意

中文題題解

以某乙個數向左右發散才能保證這個數包含在這個區間內。向左向右遍歷時比a[i]大的+1,比a[i]小的-1,以乙個k確定區間和。剛開始我是想直接用乙個陣列存每個數到i的區間和,但是無法保證每個區間都能算到所以wa了。。。後來換成用陣列存每個k出現的次數,左邊存,右邊計算保證區間和為0的區間個數。以n為對稱點來保證區間和為0。可惜當時改**著急(因為時間要到了)忘記了加上以i為右端點的區間數量。。。又wa了一發。

#include #include #include #include #include using namespace std;

const int inf = 0x3f3f3f3f;

const int maxn = 8010;

int main()

k = 0;

sum[i]+=p[n];   //加上以i為右端點的區間和位0的區間數量,之前就是把它著急忘了。。。

for(int j = i+1; j <= n; j++)

}for(int i = 1; i <= n; i++)

}return 0;

}

51Nod 1682 中位數計數

acm模版 這裡,我們可以分析得到,符合規則的區間有四種形式,分別是 i 1 j i 2 i j 3 j i j 4 而這裡,第一種不用過多處理,就是1 第2種和第3種類似,所以,我們需要求出來i之前的num的匹配情況,和i之後的num的匹配情況 而第四種要求的是,在第2種和第3種的基礎上,進行匹配...

51NOD 1682 中位數計數

1682 中位數計數 基準時間限制 1 秒 空間限制 131072 kb 分值 40 難度 4級演算法題 收藏 關注 中位數定義為所有值從小到大排序後排在正中間的那個數,如果值有偶數個,通常取最中間的兩個數值的平均數作為中位數。現在有n個數,每個數都是獨一無二的,求出每個數在多少個包含其的區間中是中...

51Nod 1682 中位數計數

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