1686 第k大區間
基準時間限制:1 秒 空間限制:131072 kb 分值: 40
難度:4級演算法題
定義乙個區間的值為其眾數出現的次數。
現給出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思路:
好像和ccpc哈爾濱一題很像。看了半天題解,才看懂。記下之前不明白的地方。
這個題是用二分和尺取來做的,但是之所以能用二分。應該是因為 ,滿足了單調性(眾數1> 眾數2 >眾數3),如果不滿足這個關鍵性質就無法二分了。
之後是尺取,尺取的方法是找到我們二分出的眾數x, 如果這個區間中的 y的個數(大於眾數x) 就記錄從n-r+1 這個區間長度(因為從當前l~ i(i>=r) y的個數必定都是大於x的, 也就沒必要再列舉了)
#include #include #include #include using namespace std;
typedef long long ll;
const int maxn=1e5+5;
int b[maxn], a[maxn], cnt[maxn];
int n,k;
bool work(int x)
return false;
}int main()
printf("%d\n", ans);
return 0;
}
51Nod 1686 第K大區間
題意 中文題,定義乙個區間的值為其眾數出現的次數。現給出n個數,求將所有區間的值排序後,第k大的值為多少。離散化二分答案加尺取判斷 include include includeusing namespace std const int maxn 100006 typedef long long l...
51 nod1686 第K大區間
定義乙個區間的值為其眾數出現的次數。現給出n個數,求將所有區間的值排序後,第k大的值為多少。很簡單的乙個題啊。然後我想了很久,是不是藥丸了啊。才四級題就差點想不出來了 明顯地二分乙個答案mid啊 主要是一開始思路死在乙個地方了,在考慮判斷是否合法 但其實我們並不需要在意我們找到這個數是不是眾數 因為...
51nod 1686 第K大區間
題目鏈結 這道題是真的好 思想很好 思路其實也不是很難 但是也不容易理解 首先,這道題運用了二分 因為答案一定是1 n 區間眾數最多n個,最少1個 那麼從1 n二分mid,二分後判斷區間值比mid大的區間有幾個 如果大於k說明mid取的小了,應該取大一點,反之取小一點,最後找到答案 那麼如何判斷區間...