description
有乙個序列含有一定數量的元素,現在要求寫乙個程式,滿足以下幾個要求:【a】支援插入操作(這個序列不允許有重複元素,即是說,如果待插入的元素已經出現在這個序列中,那麼請忽略此操作)
【b】支援刪除操作(如果此序列中不包含待刪除的這個元素,則忽略此操作,否則刪除這個元素)
【c】查詢元素x的前繼元素(前繼元素是指:小於x且與x最接近的元素,當然,如果x已經是序列中的最小元素,則x沒有前繼元素)
【d】查詢元素x的後繼元素(後繼元素是指:大於x且與x最接近的元素,當然,如果x已經是序列中的最大元素,則x沒有後繼元素)
【e】找第k小的元素
【f】求某個元素x的秩(即x的排名是多少,從小到大排序)
input
多組資料(整個檔案以輸入 -1 結束)對於每組資料,有若干行(最多100000行),表示的意義如下:
【a】 insert x
【b】 delete x
【c】 predecessor x
【d】 successor x
【e】 kth x
【f】 rank x
這6種操作的意義與上面的定義相對應!
【g】 print 表示從小到大輸出序列中的所有元素
【h】 end 表示結束本組資料
每組輸入資料後有一空行!
output
對於以上8種操作,分別輸出對應資訊,如下:【a】 insert x 不用輸出任何資訊
【b】 delete x 如果x存在,則刪除x,否則輸出 input error
【c】 predecessor x 如果x不存在,輸出 input error;否則如果x是序列中的最小元素,輸出對應資訊(見樣例),否則輸出x的前繼元素
【d】 successor x 如果x不存在,輸出 input error;否則如果x是序列中的最大元素,輸出對應資訊(見樣例),否則輸出x的後繼元素
【e】 kth x 如果x不合法,輸出 input error;否則輸出第kth小的元素(見樣例)
【f】 rank x 如果x不存在,輸出 input error;否則輸出x的排名(見樣例)
【g】 print 從小到大輸出序列中的所有元素,每個元素後加乙個逗號,並在最後加上 end of print(見樣例)
【h】 end 輸出 end of this test
insert 20insert 5
insert 1
insert 15
insert 9
insert 25
insert 23
insert 30
insert 35
kth 0
kth 1
kth 3
kth 5
kth 7
kth 9
kth 10
rank 1
rank 3
rank 5
rank 15
rank 20
rank 30
rank 31
rank 35
successor 15
successor 35
successor 25
successor 26
predecessor 1
predecessor 20
predecessor 23
predecessor 15
predecessor 111
delete 9
delete 15
delete 25
delete 23
delete 20
kth 3
kth 4
rank 30
rank 35
end-1
1,5,9,15,20,23,25,30,35,end of print#include#include#include#include#include#include#include#include#includeusing namespace std;input error
the 1_th element is 1
the 3_th element is 9
the 5_th element is 20
the 7_th element is 25
the 9_th element is 35
input error
the rank of 1 is 1_th
input error
the rank of 5 is 2_th
the rank of 15 is 4_th
the rank of 20 is 5_th
the rank of 30 is 8_th
input error
the rank of 35 is 9_th
the successor of 15 is 20
35 is the maximum
the successor of 25 is 30
input error
1 is the minimum
the predecessor of 20 is 15
the predecessor of 23 is 20
the predecessor of 15 is 9
input error
1,5,30,35,end of print
the 3_th element is 30
the 4_th element is 35
the rank of 30 is 3_th
the rank of 35 is 4_th
end of this test
#define nn 200005
#define inf 0x7ffff
struct treap
int compare(int x) const
};treap* root;
void rotate(treap* &t,int d)//旋轉
void insert(treap* &t,int x)//新增
t->maintain();
}void delete(treap* &t,int x)//刪除
else if(t->ch[1]==0)
else
}else delete(t->ch[d],x);
if(t!=0) t->maintain();
}bool find(treap *t,int x)//查詢
return false;
}int kth(treap *t,int k)//找第k小的元素
int rank(int x) //x的排名是多少,從小到大排序
else if(xkey)
p=p->ch[0];
else
}return ans;
}int depth(treap *t)
void print(treap *t)//列印樹,從小到大
int pre(int x)
p=p->ch[p->keykey>x)
p=p->ch[p->key<=x];
}if(****) return ans;
return inf;
}int main()
if(op[0]=='p'&&op[2]=='i')
else
else if(op[0]=='d')
else if(op[0]=='p'&&op[2]=='e')
{if(find(root,x))
{int y=pre(x);
if(y
二叉樹,排序二叉樹
說到二叉樹,這可是資料結構裡面的非常重要的一種資料結構,二叉樹是樹的一種,本身具有遞迴性質,所以基於二叉樹的一些演算法很容易用遞迴演算法去實現。作為一種非線性結構,比起線性結構還是相對複雜的,很多人甚至看不懂演算法的意思,不能理解。其實一開始接觸這些東西還是挺暈的,不過你多看幾遍,上機實現可能你就會...
二叉樹模板
最近學習的,關於二叉樹的建立,前中後序遍歷,和求二叉樹高等。include includetypedef struct node node typedef struct tree void preorder node node 先 前 序遍歷 根 左 右 void inorder node node...
排序二叉樹or搜尋二叉樹or查詢二叉樹
排序二叉樹,搜尋二叉樹,查詢二叉樹都是乙個意思,只是叫法不同而已。下面的文章中我們統稱為排序二叉樹。本文主要是針對高中資訊學,因此其中不涉及到指標,所有需要用指標的地方都直接使用陣列進行模擬。排序二叉樹定義 1 若左子樹不空,則左子樹上所有結點的值均小於或等於它的根結點的值 2 若右子樹不空,則右子...