HDU 5701 中位數計數 暴力

2022-03-31 15:08:33 字數 991 閱讀 6148

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

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

多組測試資料

第一行乙個數n(n≤8000)

第二行n個數,0≤每個數≤109,

n個數,依次表示第i個數在多少包含其的區間中是中位數。

51 2 3 4 5

1 2 3 2 1

暴力列舉中位數

然後比這個數小的,令為-1,比這個數大的,令為+1

那麼只要sigma(num[x]*num[2n-x])就是他的方案數

這個n^2暴力莽一波就好了

#include#include#include#include#include#include#include#includeusing namespace std;

const int maxn = 8005;

inline int read()

while(ch>='0'&&ch<='9')

return x*f;

}int n;

int a[maxn];

int h[maxn],mx;

int sum[maxn];

int l[maxn*2],r[maxn*2];

int tree[maxn];

vectorv;

int getid(int x)

void solve()

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

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

h[i]+=l[j]*r[2*n-j];

}printf("%d",h[1]);

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

printf(" %d",h[i]);

printf("\n");

}int main()

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個數在多少包含其的區間中...