zoukankan      html  css  js  c++  java
  • HihoCoder1105 题外话·堆(基础二叉搜索树)

    第1行为1个整数N,表示需要处理的事件数目。

    接下来的M行,每行描述一个事件,且事件类型由该行的第一个字符表示,如果为'A',表示小Ho将一粒糖果放进了盒子,且接下来为一个整数W,表示这颗糖果的重量;如果为'T',表示小Ho需要知道当前盒子中最重的糖果的重量是多少,在知道这个值之后,小Ho会将这颗糖果从盒子中取出并吃掉。

    对于100%的数据,满足1<=N<=10^5, 1<=w<=10^5。<>

    对于100%的数据,满足没有2颗糖果的重量是相同的,最开始的时候小Ho的糖果盒子是空的,且每次小Ho想要取出一颗糖果的时候盒子里一定至少有一颗糖果。

    输出

    在一组测试数据中:

    对于每个类型为'T'的时间,输出1个整数W_MAX,表示在这一时刻,盒子中最重的糖果的重量。

    样例输入

    5
    A 77751
    A 1329
    A 26239
    A 80317
    T
    

    样例输出

    80317
    #include<cstdio>
    #include<cstdlib>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    const int maxn=1000010;
    struct Node
    {
         int ch[2],cnt,val;
         Node()
         {
              cnt=val=0;
              ch[0]=ch[1]=0;
         }
    };
    struct Tree
    {
        Node S[maxn];
        int root,cnt;
        Tree()
        {
            root=cnt=0;
            S[0].val=0;
            S[0].cnt=0;
            S[0].ch[0]=S[0].ch[1]=0;
        }
        void insert(int &now,int val)
        {
            if(S[now].val==val){
                S[now].cnt++;
                return ;
            }
            if(!now){
                now=++cnt;
                S[now].val=val;
                S[now].cnt=1; 
                return ;
            }
            insert(S[now].ch[val>S[now].val],val);
        }
        int query(){
             int now=root,fa=root;
             while(S[now].ch[1]) {
                  fa=now;
                  now=S[now].ch[1];
             }
             S[now].cnt--;
             if(S[now].cnt==0){
                    if(now!=root&&S[now].ch[0]){
                        S[fa].ch[1]=S[now].ch[0];
                        S[now].ch[0]=0;
                        S[now].ch[1]=0;
                    }
                    else if(now==root){
                        root=S[root].ch[0];
                    }    
                    else S[fa].ch[1]=0;
             }
             return S[now].val; 
        }
    };
    Tree tree;
    int main()
    {
        int n,m;
        char opt[3];
        scanf("%d",&n);
        while(n--){
            scanf("%s",opt);
            if(opt[0]=='A'){
                scanf("%d",&m);
                tree.insert(tree.root,m);
            }
            else printf("%d
    ",tree.query());
        }
    }
  • 相关阅读:
    jQ的工具类方法
    jq-ajax
    jq-ajax-get
    LOAD
    JQ的尺寸类
    JQ-DOM与元素的操作
    jQ-DOM属性的操作
    jQ的事件
    3位创业公司CEO亲述:200人的小公司,这么做数据管理就对了
    十二潜意识的智商
  • 原文地址:https://www.cnblogs.com/hua-dong/p/7912955.html
Copyright © 2011-2022 走看看