主席樹(區間第k小)

2021-09-25 15:15:18 字數 1103 閱讀 2565

k-th number

求區間內第k小的數。主席樹的板子題

主席樹左子樹存小值,右邊大值,用sum記錄一下子樹節點個數。對(l,r)的查詢區間,root【r】 - root【l- 1】可得出(l,r)的差值,也就是大小的個數

#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define  ll long long

#define ull unsigned long long

#define mod 10007

#define inf 0x7ffffff

#define mem(a,b) memset(a,b,sizeof(a))

#define modd(a,b) (((a%b)+b)%b)

#define lson rt << 1

#define rson rt << 1 | 1

using namespace std;

const int maxn = 2e5 + 5;

int a[maxn];

int root[maxn];

int cnt = 0;

struct node

hjt[maxn*40];

vectorv;

int getid(int x)

void update(int l,int r,int pre,int &now,int p)

int query(int l,int r,int l,int r,int k)

int main()

sort(v.begin(),v.end());

v.erase(unique(v.begin(),v.end()),v.end());

for(int i = 1; i <= n; i++)

while(m--)

v.clear();

mem(a,0),mem(root,0);

}return 0;

}

主席樹 區間第k小

主席樹 權值線段樹 可持久化 權值線段樹 在此處指各個數字在某個區間內出現的次數 那麼第一棵權值線段樹會記錄 1,1 的數字出現次數 第n棵權值線段樹會記錄 1,n 的數字出現次數 例 數列為110001 第一棵權值線段樹記錄為tree1 0 0 tree1 1 1 第二棵權值線段樹記錄為tree2...

主席樹 靜態區間第k小

這是個非常經典的主席樹入門題 靜態區間第k小 資料已經過加強,請使用主席樹。同時請注意常數優化 如題,給定n個整數構成的序列,將對於指定的閉區間查詢其區間內的第k小值。輸入格式 第一行包含兩個正整數n m,分別表示序列的長度和查詢的個數。第二行包含n個整數,表示這個序列各項的數字。接下來m行每行包含...

主席樹 動態區間第k小

模板題在這裡洛谷2617。閱讀本文需要有主席樹的基礎,也就是通過區間kth的模板題。靜態整體kth sort一下找第k小,時間複雜度 o nlogn 動態整體kth 權值線段樹維護一下,時間複雜度 o nlogn 靜態區間kth 主席樹維護,時間複雜度 o nlogn 動態區間kth 就是本次的標題...