HDU 5701 中位數計數

2021-08-11 08:47:41 字數 545 閱讀 8565

這題n方可過,顯然滿足條件的區間必是含奇數個數的區間,對於每個數,

先往右掃一遍,求得其右邊比其大的和比其小的數的個數的差x,然後再往

左掃一遍,求其左邊比起小的數和比起大的數的差,若乙個數在這個區間為

中位數,則若其右邊比它大的比比它小的多x(有點繞),則其左邊相反小的要

比大的多x,這樣x才能正好在中間位置,用乙個陣列記錄一下差值為某個數

的個數即可,注意要算上這個數自己。

#include #include #include using namespace std;

int const maxn = 8005;

int const con = 8002;

int num[maxn],vis[maxn*2];

int main()

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

ans += vis[con]; ///加上自己本身這個答案

cnt = 0;

for(int j = i-1; j > 0; j--) {

if(num[j]

HDU 5701 中位數計數

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

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...