zoukankan      html  css  js  c++  java
  • 今天学了一下手写堆。

    不太喜欢,感觉写起来不太方便,再看吧。

    NOIp2004 合并果子

    #include <cstdio>
    #include <algorithm>
    const int N=10010;
    int heap[N],tot,ans=0;
    void up(int now)
    {
        while(now&&heap[now>>1]>heap[now])
            std::swap(heap[now>>1],heap[now]),now>>=1;
    }
    void insert(int x)
    {
        heap[++tot]=x;
        up(tot);
    }
    void down(int now)
    {
        int k=now<<1;
        while(k<=tot)
        {
            if(k<tot&&heap[k]>heap[k|1]) k|=1;
            if(heap[k]<heap[now])
                std::swap(heap[k],heap[now]),now=k,k=now<<1;
            else break;
        }
    }
    void extrack()
    {
        heap[1]=heap[tot--];
        down(1);
    }
    void build()
    {
        for(int i=tot/2;i;i--)
            down(i);
    }
    int main()
    {
        scanf("%d",&tot);
        for(int i=1;i<=tot;i++) scanf("%d",heap+i);
        build();
        while(tot>1)
        {
            int t=heap[1];extrack();
            t+=heap[1];extrack();
            insert(t);ans+=t;
        }
        printf("%d
    ",ans);
        return 0;
    }
    
    

    2018.6.9

  • 相关阅读:
    解析XML
    事务
    js小工具
    plsql用过的流程语句
    查询语句
    存储过程
    用过的CRT命令
    mysql常用命令
    Spirng MVC demo 完整示例01 环境搭建
    jmeter多个http请求串联
  • 原文地址:https://www.cnblogs.com/butterflydew/p/9160613.html
Copyright © 2011-2022 走看看