洛谷 P2171 Hz吐泡泡
阿新 • • 發佈:2017-12-03
格式 lan pan 整數 -a oot dfs blank span
輸入輸出樣例
輸入樣例#1: 復制
P2171 Hz吐泡泡
題目背景
Hz大大是一種可愛的動物(神)。他很喜歡吐泡泡(更喜歡寫作業)。
題目描述
這天,Hz大大心血來潮,吐了n個不同的泡泡玩(保證沒有重復的泡泡)。因為他還要寫作業,所以他請你幫他把這些泡泡排序成樹(左子樹<=根<右子樹)。輸出它的後序遍歷。
輸入輸出格式
輸入格式:
共2行。
第一行,1個整數n。(1<=n<=300000)
第二行,n個數,代表泡泡的大小。
輸出格式:
共2行。
第一行,輸出樹的深度。
第二行,輸出數的後序遍歷。
詳見樣例輸出。
輸入輸出樣例
輸入樣例#1: 復制
8
1 4 3 9 10 35 2 7
輸出樣例#1: 復制
deep=5
2
3
7
35
10
9
4
1
說明
水題一道。
思路:模擬堆
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> int n,cnt,deep,bns,root; struct data{ int ls,rs,val; }tr[300007]; int max(int a,intb){ if(a<b) return b; else return a; } void insert(int& rt,int x){ ++bns; if(!rt){ rt=++cnt;tr[rt].val=x;deep=max(deep,bns);return; } if(x>tr[rt].val) insert(tr[rt].rs,x); else insert(tr[rt].ls,x); return; } void dfs(int rt){ if(tr[rt].ls) dfs(tr[rt].ls);if(tr[rt].rs) dfs(tr[rt].rs); printf("%d\n",tr[rt].val); } int main(){ scanf("%d",&n); for(int i=1;i<=n;i++){ bns=0;int x; scanf("%d",&x); insert(root,x); } printf("deep=%d\n",deep); dfs(root); }
洛谷 P2171 Hz吐泡泡