六十分TLE求调
查看原帖
六十分TLE求调
544571
Locix_Elaina_Celome楼主2022/3/29 20:32
#include<stdio.h>
long long a[10000005],l=0;
void swap(long long &x,long long &y){
	int t=x;
	x=y;
	y=t;
}
void pushf(long long x){
	l++;
	a[l]=x;
	long long id=l;
	while(id>1&&a[id]<a[id/2]){
		swap(a[id],a[id/2]);
		id/=2;
	}
}
void popf(){
	a[1]=a[l--];
	long long id=1;
	while(id*2<=l){
		long long x=id*2;
		if(x<l&&a[x+1]<a[x]){
			x++;
		}
		if(a[x]>=a[id])break;
		swap(a[id],a[x]);
		id=x;
	} 
}
int main(){
	long long n,x;
	scanf("%lld",&n);
	for(long long i = 1;i<=n;i++){
		scanf("%lld",&x);
		pushf(x);
	}
	long long sum=0;
	while(l>1){
		x=0;
		x+=a[1];
		popf();
		x+=a[1];
		popf();
		pushf(x);
		sum+=x;
	}
	printf("%lld",sum);
}
2022/3/29 20:32
加载中...