YbtOJ 652 集合比較 Treap

2022-03-29 04:01:44 字數 1121 閱讀 1958

定義乙個元素為乙個有序集合包含兩個元素\(c=\\)

集合\(c=\\)的大小以\(a\)為第一關鍵字,\(b\)為第二關鍵字比較大小。

開始有兩個元素\(s=\,t=\\)且\(s。

然後\(n\)次加入乙個新的由兩個之前的元素依次組成的新元素,求出現過的元素小於等於它的有多少個。

\(1\leq n\leq 5\times 10^4\)

如果遞迴比較是\(o(n)\)的顯然不行,但是我們比較新的元素和舊的元素大小的時候如果我們可以知道以前元素的大小關係就可以快速比較(因為新的元素由舊的元素組成)

所以相當於我們要動態維護大小關係,因為要插入好像只能用平衡樹。

然後要在樹上查詢兩個點的大小關係,因為你要在平衡樹上邊移動邊查詢,所以不能用查詢的時候結構會改變的平衡樹(\(splay\)之類的),正解是替罪羊的,反正這裡用了\(treap\)。

比較大小的時候直接在\(treap\)上暴力跳找\(lca\)就好了,深度是\(log\)級別的,然後不能動態維護深度所以有點麻煩

時間複雜度\(o(n\log^2 n)\)

#include#include#includeusing namespace std;

const int n=51000;

int n,qfn,tot,a[n],b[n],p[n],v[n];

int t[n][2],siz[n],cnt[n],dat[n],fa[n];

int cmp(int x,int y)

while(y)

return 0;

}int cap(int x,int y)

void pushup(int x)

void zig(int &x)

void zag(int &x)

void insert(int &x,int pos)

int tmp=cap(pos,x),sum=0;

if(tmp==2)

else if(tmp)

else

pushup(x);return;

}int query(int x)

return ans;

}int main()

return 0;

}

python3集合 Python3 集合

集合 set 是乙個無序的不重複元素序列。可以使用大括號 或者 set 函式建立集合,注意 建立乙個空集合必須用 set 而不是 因為 是用來建立乙個空字典。建立格式 parame 或者set value 這裡演示的是去重功能 orange in basket 快速判斷元素是否在集合內 true c...

python3集合 Python3 集合

python3 集合 集合 set 是乙個無序的不重複元素序列。可以使用大括號或者set 函式建立集合,注意 建立乙個空集合必須用set 而不是,因為是用來建立乙個空字典。集合內建方法 add 為集合新增元素 例項 fruits.add orange print fruits 輸出結果為 clear...

2018 3 28 集合框架

1.迭代器的作用 為集合而生,用來專門遍歷集合中的元素 2.collection介面中的iterator 方法返回乙個iterator 通過iterator介面的兩個方法即可方便實現遍歷 hasnext 判斷是否存在另乙個可訪問的元素 next 返回要訪問的下乙個元素 3.map類使用迭代器遍歷元素...