1、中間數
(mid.cpp/c/pas)
【問題描述】:
有n個整數
a1-an
,任意兩個整數做絕對值差
|ai-aj|
(1<=i)可以得到
n*(n-1)/2
個絕對值差,令
m=n*(n-1)/2
,保證m
一定是個偶數,求第
m/2小的數
【輸入格式】:
輸入檔名為mid.in。
第一行,乙個整數n
接下來n行,每行乙個整數ai(
1<=ai<=1000,000,000)
【輸出格式】:
輸出檔名為mid.out。
一行,第m/2小的整數
【輸入輸出樣例】:
mid.in
mid.out
【輸入輸出樣例說明】
絕對值差分別是|1-10|=9,|1-2|=1,|1-3|=2,|10-2|=8,|10-3|=7,|2-3|=1
m=6,所以第
m/2小的數是
2【資料說明】
30%1<=n<=1000
100%1<=n<=200000
題解:開始的時候想不到如何去求解,最後還是yzh大神solve了。這道題不錯的,絕對值找中間數,
我不知道這個中間數是幹什麼用的,感覺完全可以給乙個k來尋找第k大,或者第k小的解。題目是關
於絕對值的,可以轉化一下,排個序,這樣講問題轉換為:
我們設a[i+1]-a[i]=b[i],就是在乙個集合中,集合元素為∑bi-j,問中間數,可以因為其值範圍為1000000000,
隨意想到了log 10^9*n這樣的複雜度,二分乙個x,如何知道比x小的有多少個,用乙個單調佇列,
比如1擴充套件到了z,那麼2至少可以擴充套件到z,這樣,來解決,以每個左端點為起點的答案數字r-l+1個,
這樣是o(n)的,所以複雜度有了保證。
尋找段落(二分 單調佇列)
題目描述 給定乙個長度為n的序列a i,定義a i 為第i個元素的價值。現在需要找出序列中最有價值的 段落 段落的定義是長度在 s,t 之間的連續序列。最有價值段落是指平均值最大的段落,段落的平均值 段落總價值 段落長度。輸入輸出格式 輸入格式 第一行乙個整數n,表示序列長度。第二行兩個整數s和t,...
二分答案 單調佇列 尋找段落
二分答案 單調佇列字首和維護 每次二分乙個平均值k,序列中的數全部減去k,如果序列中存在長度在 s,t 中且和超過0的子串行,則證明仍然有更大的平均值,到 mid,r 中找,反之,則到 l,mid 中找 這個操作用單調佇列維護 i s q tail 且 sum i s sum q tail 說明i ...
《單調佇列》《二分》4 偷懶的西西
高三數學作業總共有n道題目要寫 其實是抄 編號1.n,抄每道題所花時間不一樣,抄第i題要花a i 分鐘。由於西西還要準備noip,顯然不能成天做數學作業。所以西西決定只用不超過t分鐘時間抄這個,因此必然有空著的題。每道題要麼不寫,要麼抄完,不能寫一半。一段連續的空題稱為乙個空題段,它的長度就是所包含...