0分求助手写堆
查看原帖
0分求助手写堆
1421041
jiangyeleia楼主2024/12/14 20:30

#6RE其它WA

#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;
}

2024/12/14 20:30
加载中...