51nod 1686 第K大區間

2021-08-10 04:56:27 字數 930 閱讀 6409

1686 第k大區間

基準時間限制:1 秒 空間限制:131072 kb 分值: 40 

難度:4級演算法題

定義乙個區間的值為其眾數出現的次數

現給出n個數,求將所有區間的值排序後,第k大的值為多少。

input

第一行兩個數n和k(1<=n<=100000,k<=n*(n-1)/2)

第二行n個數,0<=每個數<2^31

output

乙個數表示答案。
input示例

4 2

1 2 3 2

output示例

2
思路:

好像和ccpc哈爾濱一題很像。看了半天題解,才看懂。記下之前不明白的地方。

這個題是用二分和尺取來做的,但是之所以能用二分。應該是因為 ,滿足了單調性(眾數1> 眾數2 >眾數3),如果不滿足這個關鍵性質就無法二分了。

之後是尺取,尺取的方法是找到我們二分出的眾數x, 如果這個區間中的 y的個數(大於眾數x) 就記錄從n-r+1 這個區間長度(因為從當前l~ i(i>=r) y的個數必定都是大於x的, 也就沒必要再列舉了)

#include #include #include #include using namespace std;

typedef long long ll;

const int maxn=1e5+5;

int b[maxn], a[maxn], cnt[maxn];

int n,k;

bool work(int x)

return false;

}int main()

printf("%d\n", ans);

return 0;

}

51Nod 1686 第K大區間

題意 中文題,定義乙個區間的值為其眾數出現的次數。現給出n個數,求將所有區間的值排序後,第k大的值為多少。離散化二分答案加尺取判斷 include include includeusing namespace std const int maxn 100006 typedef long long l...

51 nod1686 第K大區間

定義乙個區間的值為其眾數出現的次數。現給出n個數,求將所有區間的值排序後,第k大的值為多少。很簡單的乙個題啊。然後我想了很久,是不是藥丸了啊。才四級題就差點想不出來了 明顯地二分乙個答案mid啊 主要是一開始思路死在乙個地方了,在考慮判斷是否合法 但其實我們並不需要在意我們找到這個數是不是眾數 因為...

51nod 1686 第K大區間

題目鏈結 這道題是真的好 思想很好 思路其實也不是很難 但是也不容易理解 首先,這道題運用了二分 因為答案一定是1 n 區間眾數最多n個,最少1個 那麼從1 n二分mid,二分後判斷區間值比mid大的區間有幾個 如果大於k說明mid取的小了,應該取大一點,反之取小一點,最後找到答案 那麼如何判斷區間...