D - Coming of Age Celebration (前缀+差分)

题目链接: https://atcoder.jp/contests/abc388/tasks/abc388_d

题意:

一共有n个外星人,每当有一个外星人成年后,成年的外星人就要给他一块钱(如果没钱就不给),返回操作后数组

思路:

模拟一下,可以把 数组前面 已经成年的外星人 对下一个刚好要成年的外星人 的钱数贡献 记作前缀信息s,随着数组的遍历(成年外星人每次多一个),s每次++。
如果一个成年外星人兜里钱足够的多,那么他对后面所有的外星人的钱数贡献都是1,是不变的
否则,这个外星人就只能为他后面一部分(直到下标来到 i+1 +钱数)的外星人做出1的贡献,所以可以把位置信息记录下来,等到i碰到了这个位置,说明这个成年外星人对后面未成年外星人钱数做不了贡献了,将s--

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

int n;
const int maxn=5e5+5;
int arr[maxn];
int suf[maxn];
int s=0;
signed main()
{
	ios::sync_with_stdio(false),cin.tie(0);
	cin>>n;
	for(int i=1;i<=n;i++)cin>>arr[i];
	for(int i=1;i<=n;i++)
	{
		s+=suf[i];
		arr[i]+=s;
		s++;
		if(arr[i]>=n-i)
		{
			arr[i]-=(n-i);
		}else{
			suf[i+arr[i]+1]--;
			arr[i]=0;
		}
		cout<<arr[i]<<' ';
	}
	return 0;
}


posted @   Marinaco  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示