社区讨论

0分求助手写堆

P3378【模板】堆参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@m4o5qi3u
此快照首次捕获于
2024/12/14 20:32
去年
此快照最后确认于
2025/11/04 12:51
4 个月前
查看原帖
#6RE其它WA
CPP
#include<bits/stdc++.h>
using namespace std;
long long heap[1000001],heap1;
void put(long long d){
    int son,pa;
    heap[++heap1]=d;
    son=heap1;
    while(son>1){
        pa=son>>1;
        if(heap[son]>=heap[pa])break;
        swap(heap[son],heap[pa]);
        son=pa;
    }
}
int get()
{
    long long pa,son,res;
    res=heap[1];
    heap[1]=heap[heap1--];
    pa=1;
    while(pa*2<=heap1)
    {
        son=pa*2;
        if(son<heap1&&heap[son+1]<heap[son])son++;
        if(heap[pa]<=heap[son]) break;
        swap(heap[pa],heap[son]);
        pa=son;
    }
    return res;
}
int main()
{
    long long n,a,x;
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a;
        if(a==1){
            cin>>x;
            put(x);
        }
        if(a==2){
            cout<<get();
        }
    }
    return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...