第十一个点w了 可以请大佬帮忙看看吗
查看原帖
第十一个点w了 可以请大佬帮忙看看吗
905999
felixabc楼主2023/12/25 22:19
#include<bits/stdc++.h>
using namespace std;
int n,len,g;
int a[100010];
//int h(int b){
//	if(a[b]>=a[b/2]){
//		return 0;
//	}
//	else{
//		swap(a[b],a[b/2]);
//		h(b/2);
//	}
//}
//int hf(int b){
//	if(a[b]>=a[b*2]&&a[b]>=a[b*2+1]){
//		return 0;
//	}
//	else if(a[b*2]>a[b*2+1]){
//		swap(a[b],a[b*2]);
//		h(b*2);
//	}
//	else {
//		swap(a[b],a[b*2+1]);
//		h(b*2+1);
//	}
//}
int main(){
//	freopen("P3378_4.in","r",stdin);
	cin>>n;
	for(int i=1;i<=n;i++){
		int op;
		cin>>op;
		if(op==1){
			len++;
			cin>>a[len];
			int b=len;
			for(;;){
				if(a[b]>=a[b/2]){
					break;
				}
				else{
					swap(a[b],a[b/2]);
					b/=2;
				}
			}
//			h(len);
//			for(int i=1;i<=len;i++){
//				cout<<a[i]<<" ";
//			}
//			cout<<endl;
		}
		if(op==2){
			cout<<a[1]<<endl;
		}
		if(op==3){
			a[1]=a[len];
			a[len]=0;
			len--;
//			hf(1);
//			for(int i=1;i<=len;i++){
//				cout<<a[i]<<" ";
//			}
//			cout<<endl;
			int b=1;
			for(;;){
				int c=min(a[b*2],a[b*2+1]);
				if(a[b]<=c){
					break;
				}
				if(c==0){
					if(a[b*2]!=0&&a[b]>=a[b*2]){
						swap(a[b],a[b*2]);
						b*=2;
					}
					else{
						break;
					}
				}
				else if(a[b*2]<a[b*2+1]){
					swap(a[b],a[b*2]);
					b*=2;
				}
				else{
					swap(a[b],a[b*2+1]);
					b*=2;
					b+=1;
				}
//				for(int i=1;i<=len;i++){
//					cout<<a[i]<<" ";
//				}
//				cout<<endl;
			}
//			for(int i=1;i<=len;i++){
//				cout<<a[i]<<" ";
//			}
//			cout<<endl;
		}
	}
}
2023/12/25 22:19
加载中...