簡易版第k大(權值線段樹 動態開點模板)

2022-05-29 20:21:14 字數 2202 閱讀 2222

簡易版第k大(權值線段樹)

比較簡單的權值線段樹模板題,主要用來學一下動態開點

一般權值線段樹模板ac_code

1 include 2

using

namespace

std;

3 typedef long

long

ll;4

const

int maxn = 1e6+10;5

const

int inf=0x3f3f3f3f;6

#define rep(i,first,last) for(int i=first;i<=last;i++)

7#define dep(i,first,last) for(int i=first;i>=last;i--)

8int

n,q;

9int

a[maxn];

10int tree[maxn<<3

];11

12void updata(int rt,int l,int r,int pos,int

val)

17int mid=(l+r)>>1;18

if( pos>mid ) updata(rt<<1|1,mid+1

,r,pos,val);

19else updata(rt<<1

,l,mid,pos,val);

20 tree[rt]=tree[rt<<1]+tree[rt<<1|1

];21}22

23int kth(int rt,int l,int r,int

k)29

30int

main()

3137 rep(i,1

,q)44

else50}

51return0;

52 }

動態開點權值線段樹模板ac_code

可以發現動態開點比普通的節省了很多空間

權值線段樹 動態開點

普通平衡樹 題目給的資料是1e 7到1e7,直接寫線段樹記憶體肯定是比較吃力,而且題目還要維護rank和第k大,這時候就用到動態開點了,因為運算元一共就1e5,所以最多也只需要開 log 2 2e7 大小的陣列。修改函式void add int rt,int l,int r,int x,int v ...

掃瞄線講解,動態開點版線段樹

首先,掃瞄線是幹什麼的?掃瞄線一般運用在圖形上面,它和它的字面意思十分相似,就是一條線在整個圖上掃來掃去,它一般被用來解決圖形面積,周長等問題,以一道例題為例。給出n個正方形,這些正方形在平面直角座標系中互相重疊擺放,但四條邊都與座標軸平行,例如下圖所示。那麼知道題目了,怎麼運用呢?首先我們需要知道...

權值線段樹 動態開點(學習小結)

include include define fo i,a,b for int i a i b i const int n 200050 using namespace std int t n 18 ls n 18 rs n 18 x,now,add,tot int tag n 18 int n,n...