60分TLE求助
查看原帖
60分TLE求助
1058901
Logic_Li楼主2023/10/4 09:51

快读,但TLE

#include <queue>
#include <iostream>
#include <cstdio>

using namespace std;

int n,x,a,b,num[1000010];
long long int ans,xx,yy;
priority_queue <long long,vector<long long>,greater<long long> >q;
priority_queue <long long,vector<long long>,greater<long long> >p;

long long int cmp(){
	long long int x;
	if (p.empty()||(!q.empty()&&q.top()<p.top())){
		x=q.top();
		q.pop();
	}
	else{
		x=p.top();
		p.pop();
	}
	return x;
}

void read(int &x){
	x=0;
	char c=getchar();
	while(c<'0'||c>'9'){
		c=getchar();
	}
	while(c>='0'&&c<='9'){
		x=x*10+c-'0';
		c=getchar();
	}
}

int main(){
	cin>>n;
	for (int i=0;i<n;i++){
		read(x);
		num[x]++;
	}
	for (int i=1;i<=100000;i++){
		while(num[i]){
			q.push(i);
			num[i]--;
		}
	}
	for(int i=0;i<n-1;i++){
		xx=cmp();
		yy=cmp();
		ans+=(xx+yy);
		p.push(xx+yy);
	}
	cout<<ans<<endl;
	return 0;
} 
2023/10/4 09:51
加载中...