非旋treap fhq treap總結及模板

2021-08-28 16:35:31 字數 2651 閱讀 7204

各位大佬講得真好   

我既然講不好就不講了

插入x數

刪除x數(若有多個相同的數,因只刪除乙個)

查詢x數的排名(排名定義為比當前數小的數的個數+1。若有多個相同的數,因輸出最小的排名)

查詢排名為x的數

求x的前驅(前驅定義為小於x,且最大的數)

求x的後繼(後繼定義為大於x,且最小的數)

輸入格式:

第一行為n,表示操作的個數,下面nn行每行有兩個數opt和x,opt表示操作的序號(1≤opt≤6 )

輸出格式:

對於操作3,4,5,6每行輸出乙個數,表示對應答案

輸入樣例#1:

10

1 106465

4 11 317721

1 460929

1 644985

1 84185

1 89851

6 81968

1 492737

5 493598

輸出樣例#1:

106465

84185

492737

時空限制:1000ms,128m

1.n的資料範圍: n≤100000

2.每個數的資料範圍: [-10^7, 10^7]

#include#includeusing namespace std;

const int n=5*100000+5;

int num,root,ch[n][2],val[n],rnd[n],siz[n];

inline void pushup(int x)

inline int make(int x)

void split(int now,int k,int &x,int &y)

else

pushup(now);

} }

int merge(int x,int y)

else

} inline int getkth(int p,int k)

}} int main()

else if(op==2)

else if(op==3)

else if(op==4)

else if(op==5)

else if(op==6)

} return 0;

}

網上有許多題,就是給定乙個序列,要你支援幾種操作:a、b、c、d。一看另一道題,又是乙個序列 要支援幾種操作:d、c、b、a。尤其是我們這裡的某人,出模擬試題,居然還出了一道這樣的,真是沒技術含量……這樣 我也出一道題,我出這一道的目的是為了讓大家以後做這種題目有乙個「庫」可以依靠,沒有什麼其他的意思。這道題目 就叫序列終結者吧。 【問題描述】 給定乙個長度為n的序列,每個序列的元素是乙個整數(廢話)。要支援以下三種操作: 1. 將[l,r]這個區間內的所有數加上v。 2. 將[l,r]這個區間翻轉,比如1 2 3 4變成4 3 2 1。 3. 求[l,r]這個區間中的最大值。 最開始所有元素都是0。

第一行兩個整數n,m。m為操作個數。 以下m行,每行最多四個整數,依次為k,l,r,v。k表示是第幾種操作,如果不是第1種操作則k後面只有兩個數。

對於每個第3種操作,給出正確的回答。

4 41 1 3 2

1 2 4 -1

2 1 3

3 2 4

2【資料範圍】

n<=50000,m<=100000。

否則有乙個兒子為空的時候pushup 負數時會導致max值為不存在的0

#include#includeusing namespace std;

const int n=50000+5; const int inf=0x3f3f3f;

int n,root,num,ls[n],rs[n],rnd[n],siz[n],val[n],add[n],maxx[n]; bool rev[n];

inline int make(int x)

inline void pass(int i,long long v)

inline void pushup(int i)

inline void pushdown(int i)

if(add[i])

} void split(int now,int k,int &x,int &y)

pushdown(now);

if(k<=siz[ls[now]])

else

pushup(now);

} int merge(int x,int y)

else

} /*

void print(int x)

*/int main()

while(m--)

else if(op==2) rev[z]^=1;

else printf("%d\n",maxx[z]);

root=merge(merge(x,z),y);

// print(root); printf("\n");

} return 0;

}

非旋Treap 學習筆記

今天學習了一下非旋tr eap 聽說效率很高而且可持久化 一臉懵逼qa q 非旋treap主要是兩個操作sp lit 和me rge 下面簡單描述一下 得先會tr eap 啊 va l 點的值 ke y ra nd的值 sp lit 就是我們把原tr eap 拆成兩個tr eap x,y 比如以va...

平衡樹之非旋Treap

線段樹不支援插入or刪除乙個數於是平衡樹產生了 常見平衡樹 treap 比sbt慢,好寫吧 sbt 快,比較好寫,有些功能不支援 splay 特別慢,複雜度當做根號n來用,功能強大,不好寫 rbt 紅黑樹,特別快 替罪羊樹,朝鮮樹 晚上要講的不旋轉平衡樹 節點的左兒子中的每乙個一定比他小,右兒子中的...

關於非旋FHQ Treap的複雜度證明

a,b都是sort之後的排列 從小到大 由乙個排列a構造一顆bst,由於我們只確定了中序遍歷 a,但這顯然是不能確定一棵樹的形態的。由乙個排列b構造一顆heap 大根 由於沒有重複元素,然後人為欽定左兒子 右兒子,那麼他的後序遍歷 b。但是一棵樹,如果中序遍歷和後續遍歷確定了,那麼他的形態也就確定了...