首页 > 代码库 > BST
BST
Binary Search Tree
UVALive - 4847
1 #include <bits/stdc++.h> 2 using namespace std; 3 4 const int maxn=21; 5 const int mod=9999991; 6 7 int c[maxn][maxn]; 8 void init(){ 9 memset(c,0,sizeof(c)); 10 for(int i=0;i<maxn;i++){ 11 c[i][0]=1; 12 for(int j=1;j<=i;j++) c[i][j]=(c[i-1][j-1]+c[i-1][j])%mod; 13 } 14 } 15 struct BST{ 16 int key; 17 int lc,rc; 18 int sz,lsz,rsz; 19 }bst[maxn]; 20 void inser(int rt,int id,int x){ 21 if(bst[rt].key==0){ 22 bst[rt].key=x; 23 bst[rt].sz=1; 24 return ; 25 } 26 if(bst[rt].key>x){ 27 if(!bst[rt].lc) bst[rt].lc=id; 28 inser(bst[rt].lc,id,x); 29 }else{ 30 if(!bst[rt].rc) bst[rt].rc=id; 31 inser(bst[rt].rc,id,x); 32 } 33 bst[rt].lsz=bst[bst[rt].lc].sz; 34 bst[rt].rsz=bst[bst[rt].rc].sz; 35 bst[rt].sz= bst[rt].lsz+bst[rt].rsz+1; 36 37 } 38 int main(){ 39 int t; 40 scanf("%d",&t); 41 int n; 42 init(); 43 while(t--){ 44 scanf("%d",&n); 45 memset(bst,0,sizeof(bst)); 46 int x; 47 for(int i=1;i<=n;i++){ 48 scanf("%d",&x); 49 inser(1,i,x); 50 } 51 long long ans=1; 52 for(int i=1;i<=n;i++){ 53 (ans*=c[bst[i].sz-1][bst[i].lsz])%=mod; 54 } 55 printf("%lld\n",ans); 56 } 57 }
BST
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。