首页 > 代码库 > 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 }
View Code

 

BST