求助
查看原帖
求助
825990
hyt201128楼主2025/1/23 13:48
using namespace std;
const int N=3e5+5;
struct xtl{
	long long h,w,id;
	bool operator <(const xtl s1)const{
		if(w!=s1.w)return w>s1.w;
		return h>s1.h;
	}
}hfm[N];
priority_queue<xtl>q;
int main()
{
	//freopen("P2168.in","r",stdin);
	long long n,k,x,e,zdh=0,ans=0; 
	cin>>n>>k;
	for(int i=1;i<=n;i++){
		cin>>x;
		hfm[i].w=x;
		hfm[i].h=0;
		hfm[i].id=i;
		q.push(hfm[i]);
	}
	hfm[0].h=0;
	hfm[0].w=0;
	hfm[0].id=0;
	for(int i=1;i<=((k-1)-(n-1)%(k-1));i++){
		q.push(hfm[0]);
	}
	e=q.size();
	for(int i=1;i<=(e-1)/(k-1);i++){
		hfm[n+i].id=n+i;
		xtl nd[N];
		if(q.empty())break;
		if(q.size()<k)break;
		for(int j=1;j<=k;j++){
			nd[j]=q.top();
			q.pop();
			hfm[e+i].w+=nd[j].w;
			zdh=max(zdh,nd[j].h); 
		}
		hfm[e+i].h=zdh;
		q.push(hfm[e+i]);
		ans+=hfm[e+i].w;
		if(q.size()==1)break;
	}
	cout<<ans<<' '<<hfm[e].h;
	return 0;
}
2025/1/23 13:48
加载中...