洛谷 P1168 中位數

2022-05-26 09:06:10 字數 1547 閱讀 4738

2019-06-02

題目: 洛谷 p1168 中位數 :

給出乙個長度為nnn的非負整數序列aia_iai​,對於所有1≤k≤(n+1)/21 ≤ k ≤ (n + 1) / 21≤k≤(n+1)/2,輸出a1,a3,…,a2k−1a_1, a_3, …, a_a1​,a3​,…,a2k−1​的中位數。即前1,3,5,…1,3,5,…1,3,5,…個數的中位數。

輸入格式:

第111行為乙個正整數nnn,表示了序列長度。

第222行包含nnn個非負整數ai(ai≤109)a_i (a_i ≤ 10^9)ai​(ai​≤109)。

輸出格式:

共(n+1)/2(n + 1) / 2(n+1)/2行,第iii行為a1,a3,…,a2k−1a_1, a_3, …, a_a1​,a3​,…,a2k−1​的中位數。

輸入樣例#1:

7

1 3 5 7 9 11 6

輸出樣例#1:

135

6

對於20%20\%20%的資料,n≤100n ≤ 100n≤100;

對於40%40\%40%的資料,n≤3000n ≤ 3000n≤3000;

對於100%100\%100%的資料,n≤100000n ≤ 100000n≤100000。

思想:每次輸入保證輸入有序,若為基數,輸出中間值。

方法:使用std::vector$,使用std::upper_bound(std::$.begin(),std::$.end(),value),使用std::$.inster(std::vector::iterator,value)

說明:定義std::vector$

儲存資訊

使用std::upper_bound(std::$.begin(),std::$.end(),value)

找到第乙個嚴格大於value的值所在的迭代器

使用std::$.inster(std::vector::iterator,value)

在迭代器std::vector::iterator

前新增乙個元素值為value

令新新增的數b一定有a<=b

vector下標從0開始,所以奇數的中位數下標一定是[n/2]

ac**:

1

//2 #include 3

using

namespace

std;

4 typedef unsigned long

long

ll;5

#define ri register ll67

ll n;

8 vectorq;910

signed main()

1123}24

return0;

25}26//

注意事項:

inster新增元素時,新增在提供迭代器的前方。

upper_bound()嚴格大於,引數左閉右開。

vector下標從0開始。

洛谷 P1168 中位數

題目描述 給出乙個長度為n的非負整數序列a i 對於所有1 k n 1 2,輸出a 1 a 2 a 2k 1 的中位數。color red 即 color 前1,3,5,個數的中位數。輸入輸出格式 輸入格式 輸入檔案median.in的第1行為乙個正整數n,表示了序列長度。第2行包含n個非負整數a ...

洛谷 P1168 中位數

這個題很簡單 但是我要講3種做法 我們維護乙個小根堆乙個大根堆,其中大根堆的堆頂小於小根堆的所有元素,待加入元素大於大根堆堆頂元素就加入小根堆,反之加入大根堆,然後維護兩個堆元素數量,使得兩個堆的元素數量差為1,這樣我們取兩個堆中元素多的那個的堆頂就是答案 初始化的時候先往大根堆裡加入乙個元素,避免...

洛谷 P1168 中位數

給出乙個長度為n的非負整數序列a i 對於所有1 k n 1 2,輸出a 1 a 3 a 2k 1 的中位數。color red 即 color 前1,3,5,個數的中位數。輸入格式 輸入檔案median.in的第1行為乙個正整數n,表示了序列長度。第2行包含n個非負整數a i a i 10 9 輸...