zoukankan      html  css  js  c++  java
  • #include<cstdio> 
    #include<cstring>
    #include<cmath>
    #include<ctime>
    #include<iostream>
    #include<algorithm>
    #include<queue>
    #include<set>
    #define maxint (2147483647)
    #define l(a) ((a)<<1)
    #define r(a) ((a)<<1|1)
    #define b(a) (2<<(a))
    #define f(a) ((a)>>1)
    #define rep(i,a,b) for(int i=a;i<=(b);i++)
    #define clr(a) memset(a,0,sizeof(a))
    typedef long long ll;
    using namespace std;
    int readint(){
        int t=0,f=1;char c=getchar();
        while(!isdigit(c)){
            if(c=='-') f=-1;
            c=getchar();
        }
        while(isdigit(c)){
            t=(t<<3)+(t<<1)+c-'0';
            c=getchar();
        }
        return t*f;
    }
    ll readll(){
        ll t=0ll,f=1ll;char c=getchar();
        while(!isdigit(c)){
            if(c=='-') f=-1ll;
            c=getchar();
        }
        while(isdigit(c)){
            t=(t<<3ll)+(t<<1ll)+ll(c-'0');
            c=getchar();
        }
        return t*f;
    }
    const int maxn=1000009;
    struct heap{
        int cnt,a[maxn<<2];
        inline void init(){
            clr(a);cnt=0;
        }
        inline int top(){
            return a[1];
        }
        inline void up(int x){
            if(x==1) return;
            if(a[x]<a[f(x)]){
                swap(a[f(x)],a[x]);
                up(f(x));
            }
        }
        inline void push(int t){
            a[++cnt]=t;up(cnt);
        }
        inline void pop(){
            if(!cnt) return;
            a[1]=a[cnt];a[cnt--]=0;down(1);
        }
        inline void down(int x){
            if(a[l(x)]+a[r(x)]==0) return;
            if(a[l(x)]*a[r(x)]==0){
                if(a[l(x)]) if(a[l(x)]<a[x]) swap(a[l(x)],a[x]),down(l(x));
                if(a[r(x)]) if(a[r(x)]<a[x]) swap(a[r(x)],a[x]),down(r(x));
                return;
            }
            if(a[x]>min(a[l(x)],a[r(x)])) if(a[l(x)]<a[r(x)]){
                swap(a[l(x)],a[x]);down(l(x));
            }else{
                swap(a[r(x)],a[x]);down(r(x));
            }
        }
        inline void out(){
            rep(i,1,cnt) printf("  %d %d
    ",i,a[i]);
        }
    }Q;
    int n; 
    int main(){
        //freopen("#intput.txt","r",stdin);
        //freopen("#output.txt","w",stdout);
        n=readint();Q.init();
        while(n--){
            int opt=readint();
            if(opt==1){
                int t=readint();Q.push(t);
            }else if(opt==2) printf("%d
    ",Q.top());
            else Q.pop();
        }     
        //fclose(stdin);
        //fclose(stdout);
        return 0;
    }
    二叉堆
  • 相关阅读:
    Max Function
    动态语句语法:EXEC\SP_EXECUTESQL语法(转载)
    [转帖]在SQL SERVER中实现RSA加密算法
    [转]C#实现QQ接口软件QQ的HTTP接口协议探究
    用一条sql语句删除表中所相同的记录
    SQL Server存储过程 对数组参数的循环处理
    在WinDBG中, 使用.shell命令来搜索字符串
    SharePoint提供的一些javascript函数
    IP协议里的Time To Live(TTL)
    SharePoint Application Pool的推荐设置
  • 原文地址:https://www.cnblogs.com/chensiang/p/7756144.html
Copyright © 2011-2022 走看看