60pts O(n)求条
查看原帖
60pts O(n)求条
1318911
zhengziyan130312楼主2024/9/24 22:02
#include<bits/stdc++.h>
#include<queue>
using namespace std;
queue<long long>q1,q2;
long long ton[100001],n,a,b,c,sum;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		scanf("%d",&a);
		ton[a]++;
	}
	for(int i=0;i<=100000;i++){
		while(ton[i]--){
			q1.push(i);
		}
	}
	for(int i=1;i<n;i++){
		if(q1.empty()){
			b=q2.front();q2.pop();c=q2.front();q2.pop();
		}else if(q2.empty()){
			b=q1.front();q1.pop();c=q1.front();q1.pop();
		}else{
			if(q1.front()<=q2.front()){
				b=q1.front();q1.pop();
			}else{
				b=q2.front();q2.pop();
			}
			if(q1.empty()){
				c=q2.front();q2.pop();
			}else if(q2.empty()){
				c=q1.front();q1.pop();
			}else{
				if(q1.front()<=q2.front()){
					c=q1.front();q1.pop();
				}else{
					c=q2.front();q2.pop();
				}
			}
		}
		q2.push(b+c);
		sum+=b+c;
	}
	cout<<sum;
}
2024/9/24 22:02
加载中...