51Nod 1686 第K大區間(尺取法 想法題)

2021-08-21 03:49:21 字數 1540 閱讀 3100

給定

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