TLE,30分
查看原帖
TLE,30分
768382
thy80楼主2024/8/1 15:53

用的堆

#include<bits/stdc++.h>
using namespace std;
const int N=5*1e5+5;
struct node{
	int sum,x;
};
bool  operator < (const node& a,const node& b)
{
	if(a.sum==b.sum) return a.x>b.x;
	return a.sum<b.sum;
}
priority_queue <node ,vector<node> > q;
int k;
int n;
int a[N];
long long ans=0;
int main(){
	scanf("%d%d",&n,&k);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
		node s;
		s.sum=a[i];
		s.x=i;
		q.push(s);
	}
	while(true)
	{
		if(q.size()<k) break;
//		cout<<w.x<<" "<<w.sum<<endl;
//		cout<<e.x<<" "<<e.sum<<endl;
//		cout<<y.x<<" "<<y.sum<<endl;
		node b[N];
		for(int i=1;i<=k;i++)
		{
			b[i].x=q.top().x;
			b[i].sum=q.top().sum-1;
			q.pop();
		}
		ans++;
		for(int i=1;i<=k;i++)
		{
			if(b[i].sum!=0)q.push(b[i]);
		}
	}
	printf("%lld\n",ans);
	return 0;
}
	
2024/8/1 15:53
加载中...