分析:
数组b的最后一个元素永远不可能使1,因为即使在最后一个位置操作,也只会把前n-1个元素反转,最后一个元素只能为0.然后可以发现只要a[i]==0就可以直接输出0,当a[i]==1时一连串的1只需要最后一个1的位置改变成1的字串长度即可,在这之前的1都是0。
代码:
#include <bits/stdc++.h>
#define x first
#define y second
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
int main()
{
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
int _;
cin>>_;
while(_--)
{
int n;
cin>>n;
vector<int> a(n+10);
for(int i=0;i<n;i++) cin>>a[i];
vector<int> b;
if(a[n-1]==1)
{
cout<<"NO"<<'\n';
continue;
}
cout<<"YES"<<'\n';
int sum=0;
for(int i=n-1;i>=0;i--)
{
if(a[i]==0)
{
cout<<0<<' ';
sum=0;
}
else
{
sum++;
if(!i) cout<<sum<<' ';
else
{
if(a[i-1]==1) cout<<0<<' ';
else cout<<sum<<' ';
}
}
}
cout<<'\n';
}
}