中位數定義為所有值從小到大排序後排在正中間的那個數,如果值有偶數個,通常取最中間的兩個數值的平均數作為中位數。現在有n個數,每個數都是獨一無二的,求出每個數在多少個包含其的區間中是中位數。
多組測試資料第一行乙個數n(n≤8000)
第二行n個數,0≤每個數≤109
n個數,依次表示第i個數在多少包含其的區間中是中位數。
51 2 3 4 5
1 2 3 2 1
暴力
#include
#include
#include
#include
#include
using
namespace
std;
int main()
for (int i = 1; i <= n; ++i)
if (num[j] < num[i])
cnt[cur + 8000]++;
}ret += cnt[8000];
cnt[8000]++;
cur = 0;
for (int j = i + 1; j <= n; ++j)
if (num[j] < num[i])
ret += cnt[8000 - cur];
}printf("%s%d", i == 1 ? "" : " ", ret);
}printf("\n");
}return
0;}
HDU 5701 中位數計數
這題n方可過,顯然滿足條件的區間必是含奇數個數的區間,對於每個數,先往右掃一遍,求得其右邊比其大的和比其小的數的個數的差x,然後再往 左掃一遍,求其左邊比起小的數和比起大的數的差,若乙個數在這個區間為 中位數,則若其右邊比它大的比比它小的多x 有點繞 則其左邊相反小的要 比大的多x,這樣x才能正好在...
HDU5701 中位數計數
中位數定義為所有值從小到大排序後排在正中間的那個數,如果值有偶數個,通常取最中間的兩個數值的平均數作為中位數。現在有n個數,每個數都是獨一無二的,求出每個數在多少個包含其的區間中是中位數。收起第一行乙個數n n 8000 第二行n個數,0 每個數 10 9n個數,依次表示第i個數在多少包含其的區間中...
HDU 5701 中位數計數
中位數定義為所有值從小到大排序後排在正中間的那個數,如果值有偶數個,通常取最中間的兩個數值的平均數作為中位數。現在有n n 個數,每個數都是獨一無二的,求出每個數在多少個包含其的區間中是中位數。input多組測試資料 第一行乙個數n n 8000 n n 8000 n n 8000 第二行n n n...