"Consolidate" SBT templates (all actions)

Source: Internet
Author: User

insertion, deletion, precursor successor, K-value, rank, maximum minimum 8 kinds of inquiry take-away core L-Maintain

Complete Template Integration

Write it from 16:10 and write it to 16:28

Total time 18min approx. (Error not exceeding 1min)

My hands are really fast. Owo

This time it was a little test. It seems that SBT has been proficient in writing 0-0

You can go down to splay and Fhqtreap and the like. www

P.S. It's not wrong. If there's something wrong, someone can tell me Quq

#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include < Algorithm>using namespace Std;struct sbt{int left,right,size,data;} Tree[100000];int top,root;int n;int opt;int key;void left_rot (int &x) {int y=tree[x].right;tree[x].right=tree[y]. left;tree[y].left=x;tree[y].size=tree[x].size;tree[x].size=tree[tree[x].left].size+tree[tree[x].right].size+1; X=y;} void Right_rot (int &x) {int y=tree[x].left;tree[x].left=tree[y].right;tree[y].right=x;tree[y].size=tree[x]. Size;tree[x].size=tree[tree[x].left].size+tree[tree[x].right].size+1;x=y;}    void maintain (int &x,bool flag) {if (!flag) {if (tree[tree[tree[x].left].left].size>tree[tree[x].right].size) Right_rot (x); ElseIf (tree[tree[tree[x].left].right].size>tree[tree[x].right].size) Left_rot (Tree[x].left), Right_rot (x); elsereturn;} Else{if (tree[tree[tree[x].right].right].size>tree[tree[x].left].size) Left_rot (x); ElseIf (Tree[tree[tree[x]. Right].left].size>tree[tree[x].left].size) Right_rot (tree[x].right), Left_rot (x); elsereturn;} Maintain (tree[x].left,0); Maintain (tree[x].right,1); Maintain (x,1); Maintain (x,0);} void Insert (int &x,int data) {if (x==0) {x=++top;tree[x].size=1;tree[x].left=tree[x].right=0;tree[x].data=data;} Else{tree[x].size++;if (data<tree[x].data) Insert (tree[x].left,data); else insert (tree[x].right,data); Maintain (X,data>=tree[x].data);}} int remove (int &x,int data) {tree[x].size--;if (data>tree[x].data) remove (tree[x].right,data); ElseIf (data< Tree[x].data) Remove (Tree[x].left,data), else{if (tree[x].left!=0&&tree[x].right==0) {int ret=x;x=tree[x]. Left;return x;} ElseIf (tree[x].right!=0&&tree[x].left==0) {int ret=x;x=tree[x].right;return x;} ElseIf (tree[x].left==0&&tree[x].right==0) {int ret=x;x=0;return ret;} Else{int ret=tree[x].right;while (tree[ret].left) ret=tree[x].left;tree[x].data=tree[ret].data;remove (Tree[x]. Right,tree[ret].data);}}} int select (int &x,int k) {int r=tree[tree[x].left].size+1;if (k<r) return Select (Tree[x].left,k), ElseIf (k>r) return select (Tree[x].right,k-r); Elsereturn Tree[x].data;} int rank (int &x,int data) {if (x==0) return 0;if (Data>tree[x].data) return Tree[tree[x].left].size+1+rank (tree[x ].right,data); ElseIf (Data<tree[x].data) return rank (tree[x].left,data); Elsereturn tree[tree[x].left].size+1;} int prev (int &x,int y,int data) {if (x==0) return y;if (Data>=tree[x].data) return prev (tree[x].right,x,data); else Return prev (tree[x].left,y,data);} int succ (int &x,int y,int data) {if (x==0) return y;if (Data>=tree[x].data) return succ (tree[x].right,y,data); else return succ (Tree[x].left,x,data);} int getmin () {int x=root;while (tree[x].left) X=tree[x].left;return Tree[x].data;} int Getmax () {int x=root;while (tree[x].right) X=tree[x].right;return Tree[x].data;} int main () {scanf ("%d", &n), for (int i=1;i<=n;i++) {scanf ("%d", &opt), and switch (opt) {case 1:scanf ("%d",& Key), insert (Root,key), Break;case 2:scanf ("%d", &key);p rintf ("%d\N ", Rank (Root,key)), Break;case 3:scanf ("%d ", &key);p rintf ("%d\n ", select (Root,key)), Break;case 4:printf ("%d\n ", Getmax ()); Break;case 5:printf ("%d\n", Getmin ()) Break;case 6:scanf ("%d", &key);p rintf ("%d\n", Succ (Root,0,key)) ; Break;case 7:scanf ("%d", &key);p rintf ("%d\n", prev (Root,0,key)), Break;case 8:scanf ("%d", &key); Remove (root , key);}}}


"Consolidate" SBT templates (all actions)

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.