题解 CF1501B 【Napoleon Cake】
题目可以转化一下:给一个长为
知道这个题目意思就好办了。题目说
//封装一个模版,用起来更方便
class Difference{//difference差分
private:
int a[100010],n;
public:
void clear(int size){//由于是多测,要清空
memset(a,0,sizeof a);
n=size;
}
void add(int l,int r,int c=1){//区间加
a[l]+=c,a[r+1]-=c;
}
void init(){//递推求原数组
for(int i=1;i<=n;i++){
a[i]+=a[i-1];
}
}
int operator[](int x)const{//访问
return a[x];
}
};
int n;
Difference a;
int mian(){
scanf("%d",&n);
a.clear(n);
for(int i=1,x;i<=n;i++){
scanf("%d",&x);
if(x) a.add(max(1,i-x+1),i);
}
a.init();
for(int i=1;i<=n;i++){
printf("%d ",min(1,a[i]));
//min(1,0)=0,min(1,非0数)=1,保证输出只有0和1
}
return puts(""),0;
}