• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            巢穴

            about:blank

            P3481

            裸treap...
            學(xué)會了刪除..
            orz..

            #include <iostream>
            //#include <fstream>
            using namespace std;

            //ifstream fin("t3481.in");

            const int MAXN=100000;
            const int INF=0x7fffffff;
            int len=0;
            struct node
            {
             node 
            *left,*right;
             
            int key,r_key,value;
            }
            *root,tree[MAXN];

            /*
                a
               / \
              c   b 
             / \ / \
            g  fd   e
            */

            void RotateLeft(node *&x)
            {
                 node 
            *z=x->right;
                 x
            ->right=z->left;
                 z
            ->left=x;
                 x
            =z;
            }

            void RotateRight(node *&x)
            {
                 node 
            *z=x->left;
                 x
            ->left=z->right;
                 z
            ->right=x;
                 x
            =z;
            }

            void insert(node *&x,int value,int key)
            {
             
            if (NULL==x)
             
            {
              node 
            *p=&tree[len++];
              p
            ->left=NULL;
              p
            ->right=NULL;
              p
            ->key=key;
              p
            ->value=value;
              p
            ->r_key=rand();
              x
            =p;
              
            return;
             }

             
            if (x->key<=key)
             
            {
              insert(x
            ->right,value,key);
              
            if (x->r_key>x->right->r_key) RotateLeft(x);
             }

             
            else
             
            {
              insert(x
            ->left,value,key);
              
            if (x->r_key>x->left->r_key) RotateRight(x);
             }

            }

            void _delete(node *&x,int key)
            {

                 
            if (x==NULL) return;
                 
            if (x->key>key) _delete(x->left,key);
                 
            else
                 
            if (x->key<key) _delete(x->right,key);
                 
            else
                 
            {
                 
            if (x->left==NULL&&x->right==NULL) 
                 
            {
                  x
            =NULL;
                  
            return;
                 }

                 
            else
                 
            {
                  
            int ll,rr;
                  ll
            =x->left==NULL?INF:x->left->r_key;
                  rr
            =x->right==NULL?INF:x->right->r_key;
              
                  
            if (ll<rr)
                  
            {        
                   RotateRight(x);
                  }

                  
            else
                  
            {
                   RotateLeft(x); 
                  }
                 
                   _delete(x,key); 
                 }
                
                 }

            }

            void find_max(node *x)
            {
             
            if (NULL==x) {cout<<0<<endl;return;}
             
            if (x->right!=NULL)
             
            {
              find_max(x
            ->right);
             }

             
            else
             
            {
              cout
            <<x->value<<endl;
              _delete(root,x
            ->key);
              
            return;
             }

            }

            void find_min(node *x)
            {
             
            if (NULL==x) {cout<<0<<endl;return;}
             
            if (x->left!=NULL)
             
            {
              find_min(x
            ->left);
             }

             
            else
             
            {
              cout
            <<x->value<<endl;
              _delete(root,x
            ->key);
              
            return;
             }

            }


            int edit;


            int main()
            {
                root
            =NULL;
                
            while(1)
                
            {
                 
            int x,y;
                 cin
            >>edit;
                 
            if (0==edit) break;
                 
            switch(edit)
                 
            {
                  
            case 1:cin>>x>>y;insert(root,x,y);break;
                  
            case 2:find_max(root);break;
                  
            case 3:find_min(root);break;          
                  
            default:break;
                 }
              
                }
                
                
            //system("pause");
                return 0;
            }


             

            posted on 2009-10-13 16:23 Vincent 閱讀(90) 評論(0)  編輯 收藏 引用 所屬分類: 數(shù)據(jù)結(jié)構(gòu)與算法

            久久精品综合网| 欧美无乱码久久久免费午夜一区二区三区中文字幕 | 欧美亚洲另类久久综合婷婷| 久久久久国产精品嫩草影院| 亚洲国产成人久久综合一| 久久99热狠狠色精品一区| 欧美亚洲国产精品久久蜜芽| 国产精品青草久久久久福利99 | 日日狠狠久久偷偷色综合96蜜桃 | 久久精品国产亚洲精品2020| 成人国内精品久久久久影院| 久久久青草久久久青草| 99精品久久久久久久婷婷| 久久er国产精品免费观看8| 少妇被又大又粗又爽毛片久久黑人| 中文字幕无码久久精品青草| 日产精品久久久一区二区| 久久综合九色综合精品| 久久亚洲欧洲国产综合| 污污内射久久一区二区欧美日韩| 亚洲综合久久夜AV | 日本久久久久亚洲中字幕| 成人午夜精品久久久久久久小说| 亚洲欧美国产精品专区久久| …久久精品99久久香蕉国产| 午夜视频久久久久一区| 久久综合88熟人妻| 久久精品国产亚洲Aⅴ香蕉| 久久夜色精品国产欧美乱| 国产真实乱对白精彩久久| 天堂久久天堂AV色综合| 国产精品美女久久久久av爽| 欧美喷潮久久久XXXXx| 狠狠色综合网站久久久久久久| 日产精品久久久久久久| 久久精品一本到99热免费| 久久久久免费精品国产| 91精品国产乱码久久久久久| 色妞色综合久久夜夜| 久久精品成人欧美大片| 99久久精品费精品国产|