主席樹,查詢區間的第k小值

2021-10-04 22:30:41 字數 866 閱讀 9833

學習報告:主席樹真的nb,如果樸素做要開n個線段樹,記憶體**,優化的方式,每次插入乙個數,並不是整個權值線段樹都改變了,只是改變logn個節點,我們只需要多開logn個節點就ok,用root陣列記錄歷史個線段樹版本,詢問區間,可以做相減,詢問第k小值,與左樹的所有節點sum作比較,如果小就在左邊,否則在右邊,在右邊的時候注意是k-sum,由於值域太大,可以使用離散化,獲得每個數的排名,可以把值域縮小到n。

#include#include#include#include#include#include#include#include#include#define il inline

#define x first

#define y second

typedef long long ll;

using namespace std;

const int n=200010;

struct nodetr[n*40];

int root[n];

int w[n],cnt;

vectorv;

int getid(int x)

void modify(int l,int r,int pre,int &now,int k)

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--)

return 0;

}

主席樹(區間第k小)

k th number 求區間內第k小的數。主席樹的板子題 主席樹左子樹存小值,右邊大值,用sum記錄一下子樹節點個數。對 l,r 的查詢區間,root r root l 1 可得出 l,r 的差值,也就是大小的個數 include include include include include i...

主席樹 區間第k小

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

區間第K值 主席樹詳解

序 這是一篇遲到的題解,機房的小夥伴們系統地學主席樹應該是七月份的時候,然而我沒趕上趟,當時壓根沒看懂主席樹是什麼東東。昨天晚上決定重新來過,於是請教了一位大神1113 這是他的部落格,不過好像因為手機驗證的原因很久沒有更新了 他告訴我了主席樹的始末,然後我就秒懂了,原來並沒有想象中的那麼複雜,相信...