定義乙個區間的值為其眾數出現的次數。
現給出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啊 主要是一開始思路死在乙個地方了,在考慮判斷是否合法 但其實我們並不需要在意我們找到這個數是不是眾數 因為...