B. Napoleon Cake
倒着遍历,始终去维护当前最大渗透值
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2e6 + 5;
ll a[N], ans[N];
ll n, m, T, x;
signed main()
{
cin >> T;
while(T--)
{
cin >> n;
for(int i = 1;i <= n;i++)
{
scanf("%lld", &a[i]);
ans[i] = 0;
}
ll cnt = 0;
for(int i = n; i >= 1; --i)
{
cnt = max(cnt, a[i]);
ans[i] = (cnt > 0);
--cnt;
}
for(int i = 1; i <= n; ++i)
printf("%lld%c", ans[i] > 0 ? 1ll : 0ll, i == n ? '\n' : ' ');
}
return 0;
}
这是一个关于算法实现的代码片段,主要使用C++编写。程序从后向前遍历数组,维护当前最大值,并根据最大值更新结果数组。遍历过程中,用变量cnt记录最大值,并在每个元素处更新结果。最后输出结果数组。
457

被折叠的 条评论
为什么被折叠?



