日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

zcmu-1954

發(fā)布時(shí)間:2025/3/15 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 zcmu-1954 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1954: #104. 普通平衡樹(shù)

Time Limit: 10 Sec Memory Limit: 256 MB
Submit: 37 Solved: 18
[Submit][Status][Web Board]
Description

這是一道模板題。

您需要寫(xiě)一種數(shù)據(jù)結(jié)構(gòu)(可參考題目標(biāo)題),來(lái)維護(hù)一些數(shù),其中需要提供以下操作:

插入 x 數(shù);
刪除 x數(shù)(若有多個(gè)相同的數(shù),因只刪除一個(gè));
查詢 x 數(shù)的排名(若有多個(gè)相同的數(shù),因輸出最小的排名);
查詢排名為 x 的數(shù);
求 x 的前趨(前趨定義為小于 x ,且最大的數(shù));
求 x 的后繼(后繼定義為大于 x,且最小的數(shù))。
Input

第一行為 n ,表示操作的個(gè)數(shù),下面 n 行每行有兩個(gè)數(shù) opt 和 x,opt 表示操作的序號(hào)(1≤opt≤6)。

Output

對(duì)于操作 3、4、5、6 每行輸出一個(gè)數(shù),表示對(duì)應(yīng)答案。

Sample Input

10
1 106465
4 1
1 317721
1 460929
1 644985
1 84185
1 89851
6 81968
1 492737
5 493598
Sample Output

106465
84185
492737
HINT

1≤n≤105,?107≤x≤107

思路:套模板題 自己對(duì)樹(shù)的理解不透徹 這題純粹的套他人模板。理解還是要的,畢竟模板不是萬(wàn)能的。

ac代碼:

#include<bits/stdc++.h> using namespace std;struct treap {int l,r,sz,num,rd,val; }p[2000000];int m,size,root,ans;void update(int k) {p[k].sz=p[p[k].l].sz+p[p[k].r].sz+p[k].num; }void left_rotate(int &k) {int y=p[k].r;p[k].r=p[y].l;p[y].l=k;p[y].sz=p[k].sz;update(k);k=y; }void right_rotate(int &k) {int y=p[k].l;p[k].l=p[y].r;p[y].r=k;p[y].sz=p[k].sz;update(k);k=y; }void insert(int &k,int x) {if(k==0){++size;k=size;p[k].sz=p[k].num=1;p[k].val=x;p[k].rd=rand();return ;}++p[k].sz;if(p[k].val==x) p[k].num++;else if(x>p[k].val){insert(p[k].r,x);if(p[p[k].r].rd<p[k].rd) left_rotate(k);}else{insert(p[k].l,x);if(p[p[k].l].rd<p[k].rd) right_rotate(k);} }void del(int &k,int x) {if(k==0) return ;if(p[k].val==x){if(p[k].num>1){p[k].num--;p[k].sz--;return ;}if(p[k].r*p[k].l==0)k=p[k].l+p[k].r;else if(p[p[k].l].rd<p[p[k].r].rd) right_rotate(k),del(k,x);else left_rotate(k),del(k,x);}else if(x>p[k].val) --p[k].sz,del(p[k].r,x);else --p[k].sz,del(p[k].l,x); }int find_rank(int k,int x) {if(k==0) return 0;if(p[k].val==x) return p[p[k].l].sz+1;elseif(x>p[k].val) return p[p[k].l].sz+p[k].num+find_rank(p[k].r,x);else return find_rank(p[k].l,x); }int rerank(int k,int x) {if(k==0) return 0;if(x<=p[p[k].l].sz) return rerank(p[k].l,x);else if(x>p[p[k].l].sz+p[k].num)return rerank(p[k].r,x-p[p[k].l].sz-p[k].num);else return p[k].val; }void succ(int k,int x) {if(k==0) return ;if(p[k].val>x){ans=k;succ(p[k].l,x);}else succ(p[k].r,x); }void pred(int k,int x) {if(k==0)return ;if(p[k].val<x){ans=k;pred(p[k].r,x);}else pred(p[k].l,x); } int main() {cin>>m;int t1,t2;for(int i=1;i<=m;i++){cin>>t1>>t2;ans=0;if(t1==1)insert(root,t2);if(t1==2)del(root,t2);if(t1==3)cout<<find_rank(root,t2)<<endl;if(t1==4)cout<<rerank(root,t2)<<endl;if(t1==5){pred(root,t2);cout<<p[ans].val<<endl;}if(t1==6){succ(root,t2);cout<<p[ans].val<<endl;}}return 0; }

總結(jié)

以上是生活随笔為你收集整理的zcmu-1954的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。