社区讨论
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 条回复,欢迎继续交流。
正在加载回复...