權值線段樹

2021-09-05 16:14:52 字數 720 閱讀 3286

#include using namespace std;

int n,m,tre[10003*4],laz[10003*4];

void pushdown(int num)

}void update(int num,int le,int ri,int x,int y,int z)

pushdown(num);

int mid=(le+ri)/2;

if(x<=mid) update(num*2,le,mid,x,y,z);

if(y>mid) update(num*2+1,mid+1,ri,x,y,z);

}int query(int num,int le,int ri,int x,int y,int k)

int main(void)

return 0;

}權值線段樹

定義:以權值為關鍵字的一棵線段樹

用途:快速求乙個區間的第k大(或小)數

模板題:n個數開始全為0,m個操作

1號操作表示[b,c]內的數全部+d

2號操作表示求[b,c]內第d大的數

input output

2 5 2

1 1 2 1 2

1 1 2 2 1

2 1 1 2

2 1 1 1

2 1 2 3

tips:跟線段樹的區別只是存的是權值

權值線段樹

維護全域性的值域資訊,每個節點記錄的是該值域的值出現的總次數。使用二分的思想 離散化的時候,需要用到 支援查詢全域性k小值,全域性rank,前驅,後繼等。單詞操作時間複雜度為o logn 空間複雜度為o n 相對於平衡樹的優勢 簡單,速度快 劣勢 值域較大時,我們需要離散化,變成離線資料結構 我認為...

權值線段樹

權值線段樹是線段樹的一種,但是它與線段樹不同 線段樹的每個結點是用來維護一段區間的最大值或總和 而權值線段樹的每個結點儲存的一段區間有多少個數 權值線段樹主要用來查詢區間第k大或者第k小的值 現在有乙個陣列x 10 對陣列排序後為x 10 每個數的個數如下 1 32 2 3 24 1 5 18 1 ...

權值線段樹

權值線段樹的功能有 基於線段樹和二分的思想 即定義 int tree maxn tree i 表示某段區間數字出現的次數 一般需要離散化操作 void update int l,int r,int rt,int x,int op int mid l r 1 if x mid update lson,...