51nod 1686 二分 尺取法

2021-07-30 11:25:16 字數 776 閱讀 2056

題意:給出陣列,區間的值為其重數(這個重數是指區間內的重數,不是整個陣列的重數),求解第k大小的區間值(重數)

題解:思路:二分+尺取法

由上知:

重數的範圍為  1~~100000

重數值大的區間一定包括重數值小的區間

因此找到有大於等於k個區間值為mid就是答案了

注意:有可能第k大的值和第k-1個  或者 第 k-2個值相等

例如:陣列   1   2   3   4  4  4  4  4

步驟:預處理:

先去重(注意 用去重函式得先排序),然後計算原陣列中每個數在去重後的陣列裡面的位置

1···二分重數範圍得到mid

2···求解重數為mid的區間有多少個

3···然後就是一般性的二分處理

#include#include#includeusing namespace std;

#define maxn 100010

#define ll long long

ll n,k;

ll a[maxn],b[maxn],num[maxn];

int cmp(const void *x,const void *y)

ll deal(ll number)

printf("%lld\n",ans);

}return 0;

}

51nod 1686 第K大區間 二分 尺取

題意 定義乙個區間的值為其眾數出現的次數。現給出n個數,求將所有區間的值排序後,第k大的值為多少。思路 答案具有單調性,所以可以二分,關鍵是check的時候怎麼統計有多少區間滿足 mid,我們可以知道假如區間 l,r 滿足,那麼左右擴大這個區間都是滿足的,所以可以尺取,列舉右端點,找到最大的符合條件...

51 nod 1686 第K大區間(二分 尺取)

定義乙個區間的值為其眾數出現的次數。現給出n個數,求將所有區間的值排序後,第k大的值為多少。input第一行兩個數n和k 1 n 100000,k n n 1 2 第二行n個數,0 每個數 2 31output乙個數表示答案。sample input4 2 1 2 3 2sample output2...

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

給定 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 positi...