社区讨论
44分玄关求条(前三对和后二对)
P3378【模板】堆参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mhjdi6fc
- 此快照首次捕获于
- 2025/11/04 00:47 4 个月前
- 此快照最后确认于
- 2025/11/04 00:47 4 个月前
CPP
#include<bits/stdc++.h>
using namespace std;
int a[1000010];
int main(){
int n,op,cnt=0;
cin>>n;
for(int i=0,x;i<n;i++){
cin>>op;
if(op==1){
cin>>x;
cnt++;
a[cnt]=x;
if(cnt!=1){
int k=cnt;
for(;;){
if(k==1){
break;
}
if(a[k]<a[k/2]){
swap(a[k],a[k/2]);
k/=2;
}else{
break;
}
}
}
}else if(op==2){
cout<<a[1]<<endl;
}else if(op==3){
swap(a[1],a[cnt]);
cnt--;
int p=1;
for(;;){
if(p*2+1>cnt){
if(p*2==cnt){
if(a[p*2]>a[cnt]){
swap(a[p*2],a[cnt]);
}
}
break;
}
if(a[p*2]>=a[p]&&a[p*2+1]>=a[p]){
break;
}else{
if(a[p*2]<=a[p*2+1]){
swap(a[p],a[p*2]);
p*=2;
}else{
swap(a[p],a[p*2+1]);
p=p*2+1;
}
}
}
}
}
return 0;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...