zoukankan      html  css  js  c++  java
  • 模拟堆

    1.堆的基本操作:

        (1)插入

        (2)输出最小值

        (3)删除最小值

        (4)删除第k个插入的数

        (5)修改第k个插入的数

    堆的核心算法:down() ,up();

    问题:

      代码:

    #include <iostream>
    #include <algorithm>
    #include <cstring>
    
    using namespace std;
    
    const int N=100010;
    
    int h[N],hp[N],ph[N],size;
    int n,m;
    
    
    void heap_swap(int a,int b)
    {
        swap(h[a],h[b]);
        swap(ph[hp[a]],ph[hp[b]]);
        swap(hp[a],hp[b]);
        
    }
    
    向下排序 void down(int u) { int t=u; if(2*u<=size && h[t]>h[2*u]) t=2*u; if(2*u+1<=size && h[t]>h[2*u+1]) t=2*u+1; if(t!=u) { heap_swap(t,u); down(t); } } //向上排序 void up(int u) { int t=u; if(u/2 && h[t] <h[u/2]) t=u/2; if(u!=t) { heap_swap(t,u); up(t); } } int main() { cin>>n; while(n--) { char op[10]; cin>>op; int k,x; if(!strcmp(op,"I")) { cin>>x; size++; m++; ph[m]=size; //第M个插入的数是size hp[size]=m;// size对应第M个插入的数 h[size]=x; up(size); } else if(!strcmp(op,"PM")) cout<<h[1]<<endl; else if(!strcmp(op,"DM")) { heap_swap(1,size); size--; down(1); } else if(!strcmp(op,"D")) { cin>>k; k=ph[k]; //找到第k个插入的数 heap_swap(k,size); size--; up(k); down(k); } } return 0; }

      

  • 相关阅读:
    前端基础之HTML(第一天)
    前端基础之CSS(第二天)
    03bootstrap_表格
    02bootstrap_通用标签样式和代码
    01bootstrap_基本结构和布局
    python学习之路08——元组、集合
    python学习之路07
    python学习之路06——字符串
    python学习之路05
    python学习之路04——列表和字典
  • 原文地址:https://www.cnblogs.com/csm21/p/11718296.html
Copyright © 2011-2022 走看看