給定
n n
個數 a1
,a2.
..an
' role="presentation" style="position: relative;">a1,
a2..
.ana
1,a2
...a
n,求將所有區間眾數出現次數排序後,第
k k
大的值是多少。 1≤
n≤100000
' role="presentation" style="position: relative;">1≤n
≤1000001≤
n≤1000000≤
ai<231
0 ≤a
i<231
如果要求眾數值大於等於乙個
m m
值的區間個數,那就滿足了尺取的單調性,利用了尺取方便求數量的特點。而現在要求第
k' role="presentation" style="position: relative;">k
k大的值。由 hdu-5806 可以得到啟發,將求
k k
大值大於等於
m' role="presentation" style="position: relative;">m
m轉化為求值大於等於
m m
的數的數量大於等於
k' role="presentation" style="position: relative;">k
k。我們可以二分的設眾數個數大於等於
m m
,判斷是否有
k' role="presentation" style="position: relative;">k
k個區間眾數個數大於等於
m m
,然後找到最大的
m' role="presentation" style="position: relative;">m
m,就是要求的
k k
大值。
#include
#include
#include
#include
#include
#include
#define for(i,x,y) for(int i=(x);i<=(y);i++)
#define dor(i,x,y) for(int i=(x);i>=(y);i--)
typedef
long
long ll;
using
namespace
std;
int n;ll k;
int a[100003],b[100003];
bool check(int m)
; int r=0;
ll ans=0;
for(l,1,n)
return ans>=k;
}int main()
printf("%d\n",l);
}return
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啊 主要是一開始思路死在乙個地方了,在考慮判斷是否合法 但其實我們並不需要在意我們找到這個數是不是眾數 因為...