第k大區間
定義乙個區間的值為其眾數出現的次數。
現給出n個數,求將所有區間的值排序後,第k大的值為多少。
input
第一行兩個數n和k(1<=n<=100000,k<=n*(n-1)/2)output第二行n個數,0<=每個數<2^31
乙個數表示答案。input示例
4 2output示例1 2 3 2
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啊 主要是一開始思路死在乙個地方了,在考慮判斷是否合法 但其實我們並不需要在意我們找到這個數是不是眾數 因為...