萌新蒟蒻求助,手写堆TLE
查看原帖
萌新蒟蒻求助,手写堆TLE
67985
forest_lja楼主2021/9/19 12:59
#include<stdio.h>
#include<utility> 
using std::swap;
int que[10010];
long long n,lengthque;
void pushin (int x){
	que[lengthque]=x;
	long long m=lengthque;
	if (lengthque==1) return;
	while (m>1){
		if (que[m]<que[m%2]){
			swap(que[m],que[m%2]);
		}
		m=m%2;
	}
	return;
}
void weihu(){
	swap(que[1],que[lengthque]);
	que[lengthque]=0;
	lengthque--;
	long long m=1;
	while (m<lengthque){
		if (m*2+1>lengthque){
			if (que[m]>que[m*2]){ 
			    swap(que[m],que[m*2+1]);
			    break;
	      	}
		}
		else {
			if (que[m*2]>que[m*2+1]) {
				if (que[m]>que[m*2+1]){
					swap(que[m],que[m*2+1]);
					m=m*2+1;
				}
			}
			else {
				if (que[m]<que[m*2]){
					swap(que[m],que[m*2]);
					m=m*2;
				}
			}
		} 
		
	}
	return;
}
int main(){
	scanf("%d",&n);
	long long m;
	lengthque=0;
	for (long long i=1;i<=n;i++){
		scanf("%d",&m);
		if (m==1){
			lengthque++;
			int x;
			scanf("%d",&x);
			pushin(x);
		}
		if (m==2) printf("%d\n",que[1]);
		if (m==3) weihu();
	}
	return 0;
}

两个点A,#11RE,其它TLE。 就是按照模板写的堆,为啥会TLE啊 可恶

2021/9/19 12:59
加载中...