首页 > 其他 > 详细

P3378 【模板】堆

时间:2021-03-11 22:31:32      阅读:30      评论:0      收藏:0      [点我收藏+]

手写堆。

const int N=1e6+10;
int heap[N];
int n,m;

void up(int u)
{
    while(u/2 && heap[u] < heap[u/2])
    {
        swap(heap[u],heap[u/2]);
        u/=2;
    }
}

void down(int u)
{
    while(u*2 <= n)
    {
        int j=u*2;
        if(j<n && heap[j] > heap[j+1])
            j++;
        if(heap[j] < heap[u])
            swap(heap[j],heap[u]);
        else
            break;
        u=j;
    }
}

void insert(int x)
{
    heap[++n]=x;
    up(n);
}

int getTop()
{
    return heap[1];
}

void deleteTop()
{
    heap[1]=heap[n--];
    down(1);
}

int main()
{
    cin>>m;
    while(m--)
    {
        int op;
        cin>>op;
        if(op == 1)
        {
            int x;
            cin>>x;
            insert(x);
        }
        else if(op == 2)
            cout<<getTop()<<endl;
        else
            deleteTop();
    }
    //system("pause");
    return 0;
}

P3378 【模板】堆

原文:https://www.cnblogs.com/fxh0707/p/14520281.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!