日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【洛谷】P3369 【模板】普通平衡树

發布時間:2023/12/18 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【洛谷】P3369 【模板】普通平衡树 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目地址:

https://www.luogu.com.cn/problem/P3369

題目描述:
您需要寫一種數據結構(可參考題目標題),來維護一些數,其中需要提供以下操作:
插入xxx
刪除xxx數(若有多個相同的數,因只刪除一個)
查詢xxx數的排名(排名定義為比當前數小的數的個數+1+1+1
查詢排名為xxx的數
xxx的前驅(前驅定義為小于xxx,且最大的數)
xxx的后繼(后繼定義為大于xxx,且最小的數)

輸入格式:
第一行為nnn,表示操作的個數,下面nnn行每行有兩個數opt\text{opt}optxxxopt\text{opt}opt表示操作的序號(1≤opt≤61 \leq \text{opt} \leq 61opt6

輸出格式:
對于操作3,4,5,63,4,5,63,4,5,6每行輸出一個數,表示對應答案

數據范圍:
對于100%100\%100%的數據,1≤n≤1051\le n \le 10^51n105∣x∣≤107|x| \le 10^7x107

參考https://blog.csdn.net/qq_46105170/article/details/118997891。注意幾個小點:
1、insert之后在回溯前需要看一下是否需要旋轉,而remove不需要,這是因為remove的時候會將要被刪除的節點旋轉到下面去,但這并不改變堆性質,所以回溯之前不需要再check一遍,而insert的時候有可能增加的節點違反了堆性質,所以需要check一下是否需要旋轉;
2、旋轉的時候代碼里不需要寫pushup當前節點,因為無論在insert還是remove函數里,回溯之前都會pushup當前節點的,不需要在旋轉的時候做重復工作。

代碼如下:

#include <iostream> #include <cstring> using namespace std;const int N = 1e5 + 10, INF = 1e8; struct Node {int son[2];int key, val;int cnt, size; } tr[N]; int n, root, idx;int get_node(int key) {tr[++idx].key = key;tr[idx].val = rand();tr[idx].cnt = tr[idx].size = 1;return idx; }void pushup(int p) {tr[p].size = tr[tr[p].son[0]].size + tr[tr[p].son[1]].size + tr[p].cnt; }// d = 0代表左旋,d = 1代表右旋 void rotate(int& p, int d) {int q = tr[p].son[d ^ 1];tr[p].son[d ^ 1] = tr[q].son[d], tr[q].son[d] = p, p = q;pushup(tr[p].son[d]); }void insert(int& p, int key) {if (!p) p = get_node(key);else if (key < tr[p].key) {insert(tr[p].son[0], key);if (tr[tr[p].son[0]].val > tr[p].val) rotate(p, 1);} else if (key > tr[p].key) {insert(tr[p].son[1], key);if (tr[tr[p].son[1]].val > tr[p].val) rotate(p, 0);} else tr[p].cnt++;pushup(p); }void remove(int& p, int key) {if (!p) return;if (key < tr[p].key) remove(tr[p].son[0], key);else if (key > tr[p].key) remove(tr[p].son[1], key);else if (tr[p].cnt > 1) tr[p].cnt--;else if (!tr[p].son[0] && !tr[p].son[1]) p = 0;else if (!tr[p].son[1] || (tr[p].son[0] && tr[tr[p].son[0]].val > tr[tr[p].son[1]].val)) {rotate(p, 1);remove(tr[p].son[1], key);} else {rotate(p, 0);remove(tr[p].son[0], key);}pushup(p); }int get_rank_by_key(int p, int key) {if (!p) return 0;if (key < tr[p].key) return get_rank_by_key(tr[p].son[0], key);else if (key > tr[p].key) return tr[tr[p].son[0]].size + tr[p].cnt + get_rank_by_key(tr[p].son[1], key);else return tr[tr[p].son[0]].size + 1; }int get_key_by_rank(int p, int rank) {if (!p) return INF;else if (rank <= tr[tr[p].son[0]].size) return get_key_by_rank(tr[p].son[0], rank);else if (rank > tr[tr[p].son[0]].size + tr[p].cnt) return get_key_by_rank(tr[p].son[1], rank - tr[tr[p].son[0]].size - tr[p].cnt);else return tr[p].key; }int get_prev(int p, int key) {if (!p) return -INF;if (key <= tr[p].key) return get_prev(tr[p].son[0], key);else return max(tr[p].key, get_prev(tr[p].son[1], key)); }int get_next(int p, int key) {if (!p) return INF;if (key >= tr[p].key) return get_next(tr[p].son[1], key);else return min(tr[p].key, get_next(tr[p].son[0], key)); }int main() {scanf("%d", &n);while (n--) {int op, x;scanf("%d%d", &op, &x);if (op == 1) insert(root, x);else if (op == 2) remove(root, x);else if (op == 3) printf("%d\n", get_rank_by_key(root, x));else if (op == 4) printf("%d\n", get_key_by_rank(root, x));else if (op == 5) printf("%d\n", get_prev(root, x));else if (op == 6) printf("%d\n", get_next(root, x));}return 0; }

每個操作期望時間復雜度都是O(log?n)O(\log n)O(logn),空間O(n)O(n)O(n)nnn是當前Treap里節點個數。

總結

以上是生活随笔為你收集整理的【洛谷】P3369 【模板】普通平衡树的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 精品中文字幕视频 | av在线天堂网 | 欧美一级在线免费观看 | h毛片| 下面一进一出好爽视频 | 天天夜夜久久 | 在线中文字幕第一页 | 伊人色影院| 国产成人啪一区二区 | 国产黄页 | 尤物综合网 | 国产在线观看网站 | 9色av| 久草福利网 | 剧情av在线 | 国产精品理论片 | 国产电影一区二区三区 | 久操网在线 | 国产第一亚洲 | 日韩中文字幕av | 91午夜剧场| 羞羞色视频 | 视频网站在线观看18 | h片免费观看 | 欧美激情天堂 | 天天摸天天碰天天爽天天弄 | 在线视频中文字幕 | 成人精品一区二区三区中文字幕 | 韩日产理伦片在线观看 | 动漫羞羞 | 色午夜视频| 九九九亚洲 | 国产精品露脸视频 | 日本wwwwwww| 亚洲黄色免费电影 | 免费看亚洲 | 官场艳妇疯狂性关系 | 日韩视频网站在线观看 | 一女双乳被两男吸视频 | 国产一区二区三区在线 | 自拍偷在线精品自拍偷无码专区 | 亚洲欧美日韩综合 | 欧美午夜精品一区二区三区 | 亚洲一级黄色 | 福利所第一导航 | 99视频免费| 男男全肉变态重口高h | 亚洲风情第一页 | av2014天堂| 美国av毛片 | 手机免费看av片 | 国产av一区精品 | 国产精品久久久久久一区二区 | 少妇被躁爽到高潮 | 亚洲AV无码精品国产 | 草草福利视频 | 日韩亚洲在线 | 亚洲91精品| 日韩αv| 日韩欧美成人一区 | 亚洲国产日韩一区二区 | 婷婷人体 | 国产精品综合一区二区 | 国产精品探花一区二区三区 | 黄色私人影院 | 五月天婷婷基地 | 91tv国产成人福利 | 一区二区精品视频在线观看 | 欧美精品v国产精品v日韩精品 | 成人免费毛片足控 | 男操女视频免费 | 亚洲国产精品久久久久爰色欲 | 无码人妻丰满熟妇啪啪欧美 | 91麻豆精品一区二区三区 | 亚洲激情在线视频 | 国产毛片一区 | 成人入口| 亚州国产精品 | 痴汉电车在线播放 | 国产成人精品av | 国产黄色一区二区三区 | 一个色在线 | 不卡视频一区 | 四虎成人av | 特黄特色大片bbbb | 欧美性色黄大片手机版 | 顶级毛茸茸aaahd极品 | 男女乱淫视频 | 色网站视频| 人体一级片| 精品久久BBBBB精品人妻 | 亚洲欧美不卡 | 国产特级淫片免费看 | 精品久久久无码中文字幕 | 欧美精品色呦呦 | 伊人影院亚洲 | 色综合久久中文字幕无码 | 精品国产影院 | 奇米影视四色在线 |