8 9 10 11 TLE 68分求助
查看原帖
8 9 10 11 TLE 68分求助
785636
2022_37_yzyUUU楼主2023/9/23 10:11
#include<bits/stdc++.h>
using namespace std;
int heap[100005];
int n;
void f(int k,int n){//调整 
	while(k*2<=n){
		int j=k*2;
		if(k*2+1<=n&&heap[j]>heap[k*2+1])j++;
		if(heap[k]>heap[j])swap(heap[k],heap[j]),k=j;
		else break;
	}
}
void build(int n){//初始化 
	for(int i=n/2;i>0;i--)
		f(i,n);
}
void heapsort(int size){//排序
	build(size);
	while(size>1){
		swap(heap[1],heap[size]);
		size--;
		f(1,size);
	} 
}
int main(){
	cin>>n;
	int size=0,op,x;
	while(n--){
		scanf("%d",&op);
		if(op==1){
			scanf("%d",&x);
			size++;
			heap[size]=x;
			f(1,size);
		}
		if(op==2) printf("%d\n",heap[size]);
		if(op==3) size--;
		heapsort(size);
	}
	for(int i=1;i<=n;i++)cin>>heap[i];
	heapsort(n);
	for(int i=1;i<=n;i++)cout<<heap[i]<<" ";
	return 0;
}
2023/9/23 10:11
加载中...