#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,...