#include "bp.h"\r
+#include <algorithm>\r
+using std::min;\r
+using std::max;\r
\r
//#define CHECK\r
#define RANDOM\r
\r
int msize=0;\r
-#define mymalloc(p,n,f) {p =(__typeof__(p)) malloc((n)*sizeof(*p)); msize += (f)*(n)*sizeof(*p); /* if (f) printf("malloc %d bytes at line %d total %d\n",(n)*sizeof(*p),__LINE__,msize); */ if ((p)==NULL) {printf("not enough memory (%d bytes) in line %d\n",msize,__LINE__); exit(1);};}\r
+#define mymalloc(p,n,f) { \\r
+ p = (__typeof__(p)) malloc((n)*sizeof(*p)); \\r
+if ((p)==NULL) {printf("not enough memory (%d bytes) in line %d\n",msize,__LINE__); \\r
+ exit(1);}; \\r
+msize += (f)*(n)*sizeof(*p); \\r
+;}\r
\r
int postorder_select_bsearch(bp *b,int s);\r
\r
int childtbl[(ETW)*(1<<ETW)];\r
int childtbl2[2*ETW+1][ETW][(1<<ETW)];\r
int depthtbl[(2*ETW+1)*(1<<ETW)];\r
-\r
+int inited = 0;\r
void make_matchtbl(void)\r
{\r
int i,j,x,r;\r
int m,M;\r
pb buf[1];\r
int deg;\r
-\r
+ if (inited)\r
+ return;\r
+ inited = 1;\r
for (x = 0; x < (1<<ETW); x++) {\r
setbits(buf,0,ETW,x);\r
for (r=-ETW; r<=ETW; r++) fwdtbl[((r+ETW)<<ETW)+x] = ETW;\r