模拟堆 c++实现

#include
#include

using namespace std;

const int N=100010;
int h[N],ph[N],hp[N];
int n,m,sz;

void heap_swap(int a,int b){
    swap(ph[hp[a]],ph[hp[b]]);
    swap(hp[a],hp[b]);
    swap(h[a],h[b]);
}

void down(int u){
    int t=u;
    if(u*2<=sz && h[u*2]h[u]){
        heap_swap(u,u/2);
        u /= 2;
    }
}

int main(){
    scanf("%d",&n);
    while(n--){
        char op[5];
        int k,x;
        scanf("%s",op);
        if(!strcmp(op,"I")){
            scanf("%d",&x);
            ph[++m]=++sz;
            hp[sz]=m;
            h[sz]=x;
            up(sz);
        }else if(!strcmp(op,"PM")) printf("%d\n",h[1]);
        else if(!strcmp(op,"DM")){
            heap_swap(1,sz);
            sz--;
            down(1);
        }else if(!strcmp(op,"D")){
            scanf("%d",&k);
            k=ph[k];
            heap_swap(k,sz);
            sz--;
            down(k);
            up(k);
        }else{
            scanf("%d%d",&k,&x);
            k=ph[k];
            h[k]=x;
            up(k);
            down(k);
        }
    }
}

你可能感兴趣的:(c++,开发语言,数据结构)