B. Napoleon Cake
题目
题目大意
从小到大一层一层浇灌奶油,问有多少块面包会被浸上奶油。
解题思路
从后往前遍历,每次维护当前i和a[i]差值加一的最小值,如果i大于在这个最小值那么奶油会被浸上,否则就不会。
输入样例
3
6
0 3 0 0 1 3
10
0 0 0 1 0 5 0 0 0 2
3
0 0 0
输出样例
1 1 0 1 1 1
0 1 1 1 1 1 0 0 1 1
0 0 0
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define sl(n) scanf("%lld",&n)
#define pl(n) printf("%lld",n)
#define pE printf("\n")
#define ull unsigned long long
#define pb push_back
#define pre(n) for(ll i=1;i<=n;i++)
#define rep(n) for(ll i=n;i>=1;i--)
#define pi pair<ll,ll>
int main()
{
ll t,m,n,i;
sl(t);
while(t--){
sl(n);
m=1e6;
ll a[n+1],b[n+1];
pre(n)sl(a[i]);
rep(n){
m=min(m,i-a[i]+1);
if(i>=m)b[i]=1;
else b[i]=0;
}
pre(n)pl(b[i]),printf(" ");
pE;
}
return 0;
}