樹狀陣列 二分查詢第K大 經典應用

2021-09-29 23:37:42 字數 572 閱讀 9210

按題意每一次查詢和最大的p個數的最小字典序中第q個位置的數字;

首先我們可以把所有數字的按從大到小進行一級排序,位置按從前往後進行二級排序,那麼在排序以後p個數的最大和且最小字典序就是前p個數,那麼我只要輸出前面按照位置從小到大的第q個數就行了。

顯然,問題轉化後就是求前p個數中的第q大值;

樹狀陣列維護數字x是第幾大,然後在有單調性的情況下選擇二分第q大值就好了。

#include#include#include#include#include#include#includeusing namespace std;

const int n = 2e5+5;

typedef long long ll;

int a[n],ans[n],n,sum[n];

struct abc[n];

struct scb[n];

bool cmp(ab p,ab q)

ans[b[q].z]=a[r];

q++;

} }for(i=1;i<=m;i++)

return 0;

}

動態維護集合第k小數字 樹狀陣列 二分

設計一種資料結構能夠實現以下幾個操作 在結構中插入乙個數字x 在結構中刪除乙個數字x 如果沒有該數字,應當不操作 查詢結構中的第k小數字 相同數字應當累計,如 1 5 3 3 1,第 3 大的數字是 3,第 5 大的數字是 5.其中1 x 100000 一秒需要執行100000次隨機操作,所以三項操...

51nod 第K大區間2(二分 樹狀陣列)

定義乙個長度為奇數的區間的值為其所包含的的元素的中位數。現給出n個數,求將所有長度為奇數的區間的值排序後,第k大的值為多少。樣例解釋 l,r 表示區間的值 1 3 2 1 3 2 4 4 1,3 2 2,4 2 第三大是2 input第一行兩個數n和k 1 n 100000,k 奇數區間的數量 第二...

E Minimum Array 樹狀陣列 二分

其實貪 心還是比 較顯 然其實貪心還是比較顯然 其實貪心還是 比較顯然對於 乙個ai 我們最 好找到b j n ai 對於乙個a i,我們最好找到b j n a i 對於乙個ai 我們 最好找到 bj n ai 這樣 對n求餘 後就是0 最 優這樣對n求餘後就是0,最優 這樣對n求餘 後就是0 最優...