题目

给定一个空数组 V和一个整数数组 a1,a2,…,an。

现在要对数组 V进行 n 次操作。第 i次操作的具体流程如下:

  1. 从数组 V尾部插入整数 0。
  2. 将位于数组 V末尾的 ai个元素都变为 1(已经是1的不予理会)。
    注意:
  • ai 可能为 0,即不做任何改变。
  • ai 可能大于目前数组 V所包含的元素个数,此时视为将数组内所有元素变为 1。
    请你输出所有操作完成后的数组 V。
    image-1676877535538

题解

#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;
}