loj6088 可持久化最長不降子串行

2022-06-07 18:00:08 字數 797 閱讀 2923

考慮二分求lis的過程,就是維護乙個序列,其中第i個數表示長度為i的最小結尾,而插入操作就是查詢第乙個大於x的位置並替換掉

用線段樹維護,二分的過程也可以用線段樹來完成,對線段樹可持久化即可

1 #include2

using

namespace

std;

3#define n 500005

4#define mid (l+r>>1)

5int b,v,n,p,x,y,r[n],ans[n],f[n*30],ls[n*30],rs[n*30];6

int copy(int

k)12

void build(int &k,int l,int

r)18

build(ls[k],l,mid);

19 build(rs[k],mid+1

,r);

20 f[k]=max(f[ls[k]],f[rs[k]]);21}

22void update(int &k,int l,int r,int x,int

y)28

if (x<=mid)update(ls[k],l,mid,x,y);

29else update(rs[k],mid+1

,r,x,y);

30 f[k]=max(f[ls[k]],f[rs[k]]);31}

32int query(int k,int l,int r,int

x)37

intmain()49}

50 }

view code

LOJ 持久化序列 可持久化treap

一道模板題 在寫完這道題以後就去找其他帶翻轉的可持久化treap題去寫了 發現自己根本不會可持久化treap 什麼標記翻轉可持久化 自閉了一整天 網上也沒有找到很好的模板 於是選擇擱置一段時間 等以後時間充裕了再來磕 includeusing namespace std const int maxn...

可持久化Treap

本來是想寫一點題的,但是hfu最近讓我改鍵盤指法,原來都是亂打 手速蠻快就是錯的多 剛開始練手法真的煩躁,像我這種從來不用小指頭的 就寫個學習筆記吧.非教程向,只是懂了後寫點隨筆,練成指法說不定能來填坑.可持久化treap首先是基於非旋轉式treap的,如果要旋轉的話那麼就會破壞父子關係導致無法可持...

可持久化Treap

可持久化treap本質上市乙個二叉平衡樹,若不對其規則進行修改,中序遍歷後得出的序列是遞增的。void maintain o 計算結點o的size int lowcount key 比key所在位置小1 int uppercount key key所在的位置,如果有多個相同的key,選位置最大的 i...