51nod 1686 第K大區間 離散化 二分

2021-07-11 10:48:09 字數 800 閱讀 9960

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

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

二分答案,對於每個值判斷大於等於該值的區間個數是否大於等於k

判斷某個值mid時列舉右端點,找到使得以該右端點為眾數的最大的左端點。那麼該區間就是滿足題意的乙個最小的區間之一,再加上前面的區間外的元素,就可以得到右端點為該點的滿足條件的區間數。這樣保證了任何被加進去的區間中的眾數至少為mid。

#include

#include

#include

using

namespace

std;

const

int maxn = 1e5 + 5;

int a[maxn], b[maxn];

int cnt[maxn];

int n;

long

long k;

bool judge(int mid)

while(a[l] != a[i])

}if(***) ans += l;

}return ans >= k;

}int main (void)

sort(b + 1, b +1 + n);

int t = unique(b + 1, b + n + 1) - (b + 1);

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

int l = 1, r = n + 1;

while(l + 1

< r)

cout

0;}

51Nod 1686 第K大區間

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

51nod 1686 第K大區間

1686 第k大區間 基準時間限制 1 秒 空間限制 131072 kb 分值 40 難度 4級演算法題 定義乙個區間的值為其眾數出現的次數。現給出n個數,求將所有區間的值排序後,第k大的值為多少。input 第一行兩個數n和k 1 n 100000,k n n 1 2 第二行n個數,0 每個數 2...

51 nod1686 第K大區間

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