题目
给定一个空数组 V和一个整数数组 a1,a2,…,an。
现在要对数组 V进行 n 次操作。第 i次操作的具体流程如下:
- 从数组 V尾部插入整数 0。
- 将位于数组 V末尾的 ai个元素都变为 1(已经是1的不予理会)。
注意:
- ai 可能为 0,即不做任何改变。
- ai 可能大于目前数组 V所包含的元素个数,此时视为将数组内所有元素变为 1。
请你输出所有操作完成后的数组 V。
题解
#include<iostream>
#include<cstring>
using namespace std;
const int N=200010;
int a[N];
int main(){
int t,n;
cin>>t;
while(t--){
cin>>n;
memset(a,0,(n+1)*4);
for(int i=1;i<=n;i++){
int x;
cin>>x;
int l=max(1,i-x+1),r=i;//,i-x+1~i表示末尾x个
a[l]++,a[r+1]--;
}
for(int i=1;i<=n;i++)a[i]+=a[i-1];
for(int i=1;i<=n;i++)cout<<!!a[i]<<" ";
puts("");
}
return 0;
}