void dp() { int i,j,k; ST st(start,0); tree.Insert(st); for (i=0;i<n;i++) { int lmin=maxl,rmin=maxl; SplayTree<ST>::node *p; while (1) { tree.Splay(tree.root,ST(a[i].l,0)); p=tree.root; if (p==tree.nullnode||p->key>ST(a[i].r,0)) break; lmin=Min(lmin,Abs(p->key.key-a[i].l)+p->key.data); rmin=Min(rmin,Abs(a[i].r-p->key.key)+p->key.data); tree.Delete(p->key); } tree.Insert(ST(a[i].l,lmin)); tree.Insert(ST(a[i].r,rmin)); } int res=maxl; int tot=0; while (tree.root !=tree.nullnode) { tot++; res=Min(res,tree.root->key.data+Abs(tree.root->key.key)); tree.Delete(tree.root->key); } cout<<tot<<endl; printf("%d\n",res); }
void splay_tree() { SplayTree<int> splayTree; #define SPLAY_LOOP for (int i = 0; i < 20; i ++) SPLAY_LOOP { splayTree.Insert(i); } SPLAY_LOOP { assert(splayTree.Exists(i)); } SPLAY_LOOP { splayTree.Delete(i); } SPLAY_LOOP { assert(!splayTree.Exists(i)); } }
void accept_tree(){ int n; SplayTree st; cout<<"Create splay tree: (enter 0 to finish)\n"; while(1) { fflush(stdin); cout<<"\nEnter node value: "; cin>>n; if(n==0) { break; } root =st.Insert(n,root); } root = st.Delete(4, root); }