51NOD 1686 第K大區間 二分

2022-04-17 13:24:22 字數 1227 閱讀 2777

第k大區間

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

現給出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

題解:

二分答案,

我們假設x,計算出多少個區間的眾數大於等於k就好了

方法就是:列舉乙個區間的右端點,那麼我們假設找到乙個左端點盡量大,那麼就是固定的右端點的答案,累加就是了

注意這題不要用map等stl,會超時

#include #include 

#include

#include

#include

#include

using

namespace

std;

const

int n = 1e5+10, m = 30005, mod = 1e9+7, inf = 0x3f3f3f3f

;typedef

long

long

ll;//

不同為1,相同為0

void read(ll &x)

vector

g[n];

inth[n];

ll n,k,a[n],pos[n],b[n];

ll cal(

intx)

else pos[i] = 0

; l =max(l,pos[i]);

ans+=l;

h[a[i]]++;

int tmp =h[a[i]];

g[a[i]].push_back(i);}//

coutcoutans;

}int

main()

printf(

"%lld\n

",ans);

//cout}

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