0分求助
查看原帖
0分求助
551100
Hoks楼主2022/8/20 19:19
#include<bits/stdc++.h>
#define int long long
using namespace std;
struct node
{
	int x,id;
	bool operator<(const node &a)
		const{return a.x>x;}
};
int n,m;
int a[1000010];
priority_queue<node> q;
int ans;
int read()
{
	char c=getchar();int x=0,f=1;
	while(!isdigit(c)){if(c=='-') f=-1;c=getchar();}
	while(isdigit(c)) x=(x<<1)+(x<<3)+(c^48),c=getchar();
	return x*f;
}
void sc(int n)
{
    if(n<0) putchar('-'),n*=-1;
    if(n>9) sc(n/10);
    putchar(n%10+'0');
}
signed main()
{
	m=read(),n=read();
	for(int i=1;i<=n;i++) a[i]=read();
	for(int i=1;i<m;i++) q.push((node){a[i],i});
	for(int i=m;i<=n;i++)
	{
		q.push((node){a[i],i});
		node x=q.top();q.pop();
		while(x.id<=i-m+1) x=q.top(),q.pop();
		if(x.x>=0) ans+=x.x,q.push((node){x.x-1,x.id});
		else q.push((node){x.x,x.id});
		sc(ans);printf(" ");
	}
	return 0;
}

RT

2022/8/20 19:19
加载中...