#include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <cstring>
#define ll long long
#define INF 0x7f7f7f7f
using namespace std;
ll n,num[200005],step[200005],vis[200005];
void bfs(ll x)
{
bool flag=true;
ll cnt[200005]={0};
queue <ll> q;
q.push(x);
cnt[x]=0;
while(!q.empty()){
int pos=q.front(),x1=pos-num[pos],x2=pos+num[pos];
q.pop();
vis[pos]=1;
if(x1>=0){
if(!vis[x1]){
q.push(x1);
cnt[x1]=cnt[pos]+1;
if((num[x]+num[x1])%2){
step[x]=min(cnt[x1],step[x]);
flag=false;
}
}
}
if(x2<n){
if(!vis[x2]){
q.push(x2);
cnt[x2]=cnt[pos]+1;
if((num[x]+num[x2])%2){
step[x]=min(cnt[x2],step[x]);
flag=false;
}
}
}
}
if(flag){
step[x]=-1;
}
}
int main()
{
ios::sync_with_stdio(0);
memset(step,INF,sizeof(step));
cin>>n;
for(ll i=0;i<n;i++){
cin>>num[i];
}
for(ll i=0;i<n;i++){
bfs(i);
memset(vis,0,sizeof(vis));
}
for(ll i=0;i<n;i++){
printf("%lld%s",step[i],i==n-1?"\n":" ");
}
return 0;
}
原题