记得开文件就好= - =

#include <bits/stdc++.h>
using namespace std;
const int N=1e2+5,M=1e5+5;
int c[N][M];
int a[N];
int w[N][M];
int dis[N][M];
int vis[N][M];
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
struct vv{
    int x,y;
};
queue<vv>q;

void bfs()
{
    while(q.size())
    {
        vv temp=q.front();
        //printf("%d %d %d\n",temp.x,temp.y,dis[temp.x][temp.y]);
        q.pop();
        for(int i=0;i<4;i++)
        {
            int tx=temp.x+dx[i],ty=temp.y+dy[i];
            //if(tx==4&&ty==2) printf("%d %d %d\n",temp.x,temp.y,dis[temp.x][temp.x]);
            //cout<<tx<<' '<<ty<<endl;||vis[tx][ty]
            if(i==2&&temp.y>a[temp.x+1]+1)//下
            {
                if(vis[temp.x+1][a[temp.x+1]+1]||w[temp.x+1][a[temp.x+1]+1]) continue;
                dis[temp.x+1][a[temp.x+1]+1]=dis[temp.x][temp.y]+1;
                q.push({temp.x+1,a[temp.x+1]+1});
                vis[temp.x+1][a[temp.x+1]+1]=1;
            }
            else if(i==3&&temp.y>a[temp.x-1]+1)//上
            {
                if(vis[temp.x-1][a[temp.x-1]+1]||w[temp.x-1][a[temp.x-1]+1]) continue;
                dis[temp.x-1][a[temp.x-1]+1]=dis[temp.x][temp.y]+1;
                q.push({temp.x-1,a[temp.x-1]+1});
                vis[temp.x-1][a[temp.x-1]+1]=1;
            }
            else
            {
                if(vis[tx][ty]||w[tx][ty]) continue;
                dis[tx][ty]=dis[temp.x][temp.y]+1;
                q.push({tx,ty});
                vis[tx][ty]=1;
            }
        }
    }
}

int main()
{
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    int n;scanf("%d",&n);
    for(int i=0;i<N-4;i++)
    {
        for(int j=0;j<M-4;j++)
        {
            w[i][j]=1;
        }
    }
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
        for(int j=1;j<=a[i]+1;j++)
        {
            w[i][j]=0;
        }
    }
    int r1,c1,r2,c2;
    scanf("%d%d%d%d",&r1,&c1,&r2,&c2);
    q.push({r1,c1});
    memset(dis,-1,sizeof dis);
    dis[r1][c1]=0;
    vis[r1][c1]=1;
    bfs();
    printf("%d\n",dis[r2][c2]);
    return 0;
}