Problem p02579 (C++) — buggy submission, verdict: Runtime Error

#include <bits/stdc++.h>
using namespace std;

#define Darr(x)                                                                \\
  cerr << #x << " = ";                                                         \\
  for (auto i : x)                                                             \\
    cerr << i << " ";                                                          \\
  cerr << "\\n";
#define ar array
#define pr pair
#define vt vector
#define pb push_back
#define all(c) (c).begin(), (c).end()
#define sz(x) (int)(x).size()

#define F_OR(i, a, b, s)                                                       \\
  for (int i = (a); (s) > 0 ? i < (b) : i > (b); i += (s))
#define F_OR1(e) F_OR(i, 0, e, 1)
#define F_OR2(i, e) F_OR(i, 0, e, 1)
#define F_OR3(i, b, e) F_OR(i, b, e, 1)
#define F_OR4(i, b, e, s) F_OR(i, b, e, s)
#define GET5(a, b, c, d, e, ...) e
#define F_ORC(...) GET5(__VA_ARGS__, F_OR4, F_OR3, F_OR2, F_OR1)
#define FOR(...)                                                               \\
  F_ORC(__VA_ARGS__)                                                           \\
  (__VA_ARGS__)
#define EACH(x, a) for (auto &x : a)

template <class A> void read(vt<A> &v);
template <class A, size_t S> void read(ar<A, S> &a);
template <class T> void read(T &x) { cin >> x; }
void read(double &d) {
  string t;
  read(t);
  d = stod(t);
}
void read(long double &d) {
  string t;
  read(t);
  d = stold(t);
}
template <class H, class... T> void read(H &h, T &...t) {
  read(h);
  read(t...);
}
template <class A> void read(vt<A> &x) {
  EACH(a, x)
  read(a);
}
template <class A, size_t S> void read(array<A, S> &x) {
  EACH(a, x)
  read(a);
}
string to_string(char c) { return string(1, c); }
string to_string(bool b) { return b ? "yes" : "no"; }
string to_string(const char *s) { return string(s); }
string to_string(string s) { return s; }
string to_string(vt<bool> v) {
  string res;
  FOR(sz(v))
  res += char('0' + v[i]);
  return res;
}

template <size_t S> string to_string(bitset<S> b) {
  string res;
  FOR(S)
  res += char('0' + b[i]);
  return res;
}
template <class T> string to_string(T v) {
  bool f = 1;
  string res;
  EACH(x, v) {
    if (!f)
      res += ' ';
    f = 0;
    res += to_string(x);
  }
  return res;
}

template <class A> void write(A x) { cout << to_string(x) << " "; }
template <class H, class... T> void write(const H &h, const T &...t) {
  write(h);
  write(t...);
}
void print() { cout << ("\\n"); }
template <class H, class... T> void print(const H &h, const T &...t) {
  write(h);
  if (sizeof...(t))
    write(' ');
  print(t...);
}

void deb() { cerr << endl; }

template <typename Head, typename... Tail> void deb(Head H, Tail... T) {
  cerr << to_string(H) << " ";
  deb(T...);
}

using ll = long long;

pair<const int, const int> dxdy[4] = {{0, 1}, {1, 0}, {-1, 0}, {0, -1}};

vt<pair<const int, const int>> diag;

const int MxN = 1e6 + 5;
vt<pair<int, int>> adj[MxN];
vt<int> d(MxN, INT32_MAX);

void solve() {
  for (int i = -2; i <= 2; i++) {
    for (int j = -2; j <= 2; j++) {
      int ok = 0;
      for (auto [x, y] : dxdy) {
        ok |= (i == x && j == y);
      }
      if (!ok && (i || j))
        diag.pb({i, j});
    }
  }
  //  /  for(auto [x,y]:diag){write(x,y);print();}
  // write(diag.size());

  int h, w, stx, sty, enx, eny;
  read(h, w, stx, sty, enx, eny);
  --stx, --sty, --enx, --eny;
  vt<vt<char>> mat(h, vt<char>(w));
  read(mat);

  auto valid = [&](int x, int y) {
    return (x < h && x >= 0 && y < w && y >= 0 && mat[x][y] == '.');
  };
  auto conv = [&](int x, int y) {
    return (x + y * (h));
  }; /*
   FOR(h){write(mat[i]);print();} */
  FOR(h) {
    FOR(j, w) {
      if (valid(i, j)) {
        for (auto [x, y] : dxdy) {
          if (valid(i + x, y + j)) {
            adj[conv(i, j)].pb({conv(i + x, y + j), 0});
          }
        }
        for (auto [x, y] : diag) {
          if (valid(i + x, y + j)) {
            adj[conv(i, j)].pb({conv(i + x, y + j), 1});
          }
        }
      }
    }
  }

  deque<int> q;

  q.push_front(conv(stx, sty));
  d[conv(stx, sty)] = 0;
  //   /  for(auto [x,y]:adj[0])write(x);
  // /write(conv(enx,eny));

  while (!q.empty()) {
    int v = q.front();
    // if(v = conv(enx,eny))break;
    // int wt = q.s`econd;
    q.pop_front();
    for (auto [u, w] : adj[v]) {
      if (d[v] + w < d[u]) {
        // write("asdkjajsd");
        d[u] = d[v] + w;
        if (w == 1)
          q.push_back(u);
        else
          q.push_front(u);
      }
    }
  }
  write((d[conv(enx, eny)] == INT32_MAX ? -1 : d[conv(enx, eny)]));
  /*  FOR(conv(4,4)+1){
       cout<<i<<"=====>>>>>>";
       for(auto [x,y]:adj[i]){cout<<x<<" ";}
    cout<<"\\n";
   } */
  /* FOR(21){
      write(i,d[i]);print();
  } */
  //    write(d[conv(1,1)]);
}
int32_t main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
#ifndef ONLINE_JUDGE
  freopen("input.txt", "r", stdin);
  // /freopen("output.txt", "w", stdout);
#endif

  int tc = 1;

  // UNCOMMENT FOR TEST CASE
  // cin >> tc;
  FOR(tc) {
    // write("Case #", i+1, ": ");
    solve();
  }
}


Error: -6
terminate called after throwing an instance of 'std::length_error'
  what():  cannot create std::vector larger than max_size()


Fixed submission:

#include <bits/stdc++.h>
using namespace std;

#define Darr(x)                                                                \\
  cerr << #x << " = ";                                                         \\
  for (auto i : x)                                                             \\
    cerr << i << " ";                                                          \\
  cerr << "\\n";
#define ar array
#define pr pair
#define vt vector
#define pb push_back
#define all(c) (c).begin(), (c).end()
#define sz(x) (int)(x).size()

#define F_OR(i, a, b, s)                                                       \\
  for (int i = (a); (s) > 0 ? i < (b) : i > (b); i += (s))
#define F_OR1(e) F_OR(i, 0, e, 1)
#define F_OR2(i, e) F_OR(i, 0, e, 1)
#define F_OR3(i, b, e) F_OR(i, b, e, 1)
#define F_OR4(i, b, e, s) F_OR(i, b, e, s)
#define GET5(a, b, c, d, e, ...) e
#define F_ORC(...) GET5(__VA_ARGS__, F_OR4, F_OR3, F_OR2, F_OR1)
#define FOR(...)                                                               \\
  F_ORC(__VA_ARGS__)                                                           \\
  (__VA_ARGS__)
#define EACH(x, a) for (auto &x : a)

template <class A> void read(vt<A> &v);
template <class A, size_t S> void read(ar<A, S> &a);
template <class T> void read(T &x) { cin >> x; }
void read(double &d) {
  string t;
  read(t);
  d = stod(t);
}
void read(long double &d) {
  string t;
  read(t);
  d = stold(t);
}
template <class H, class... T> void read(H &h, T &...t) {
  read(h);
  read(t...);
}
template <class A> void read(vt<A> &x) {
  EACH(a, x)
  read(a);
}
template <class A, size_t S> void read(array<A, S> &x) {
  EACH(a, x)
  read(a);
}
string to_string(char c) { return string(1, c); }
string to_string(bool b) { return b ? "yes" : "no"; }
string to_string(const char *s) { return string(s); }
string to_string(string s) { return s; }
string to_string(vt<bool> v) {
  string res;
  FOR(sz(v))
  res += char('0' + v[i]);
  return res;
}

template <size_t S> string to_string(bitset<S> b) {
  string res;
  FOR(S)
  res += char('0' + b[i]);
  return res;
}
template <class T> string to_string(T v) {
  bool f = 1;
  string res;
  EACH(x, v) {
    if (!f)
      res += ' ';
    f = 0;
    res += to_string(x);
  }
  return res;
}

template <class A> void write(A x) { cout << to_string(x) << " "; }
template <class H, class... T> void write(const H &h, const T &...t) {
  write(h);
  write(t...);
}
void print() { cout << ("\\n"); }
template <class H, class... T> void print(const H &h, const T &...t) {
  write(h);
  if (sizeof...(t))
    write(' ');
  print(t...);
}

void deb() { cerr << endl; }

template <typename Head, typename... Tail> void deb(Head H, Tail... T) {
  cerr << to_string(H) << " ";
  deb(T...);
}

using ll = long long;

pair<const int, const int> dxdy[4] = {{0, 1}, {1, 0}, {-1, 0}, {0, -1}};

vt<pair<const int, const int>> diag;

const int MxN = 1e6 + 5;
vt<pair<int, int>> adj[MxN];
vt<int> d(MxN, INT32_MAX);

void solve() {
  for (int i = -2; i <= 2; i++) {
    for (int j = -2; j <= 2; j++) {
      int ok = 0;
      for (auto [x, y] : dxdy) {
        ok |= (i == x && j == y);
      }
      if (!ok && i && j)
        diag.pb({i, j});
    }
  }
  //    for(auto [x,y]:diag){write(x,y);print();}
  // write(diag.size());

  int h, w, stx, sty, enx, eny;
  read(h, w, stx, sty, enx, eny);
  --stx, --sty, --enx, --eny;
  vt<vt<char>> mat(h, vt<char>(w));
  read(mat);

  auto valid = [&](int x, int y) {
    return (x < h && x >= 0 && y < w && y >= 0 && mat[x][y] == '.');
  };
  auto conv = [&](int x, int y) { return (x + y * (h + 1)); };
  FOR(h) {
    FOR(j, w) {
      for (auto [x, y] : dxdy) {
        if (valid(i + x, y + j)) {
          adj[conv(i, j)].pb({conv(i + x, y + j), 0});
        }
      }
      for (auto [x, y] : diag) {
        if (valid(i + x, y + j)) {
          adj[conv(i, j)].pb({conv(i + x, y + j), 1});
        }
      }
    }
  }

  deque<int> q;

  q.push_front(conv(stx, sty));
  d[conv(stx, sty)] = 0;
  //   /  for(auto [x,y]:adj[0])write(x);
  // /write(conv(enx,eny));

  while (!q.empty()) {
    int v = q.front();
    // if(v = conv(enx,eny))break;
    // int wt = q.s`econd;
    q.pop_front();
    for (auto [u, w] : adj[v]) {
      if (d[v] + w < d[u]) {
        // write("asdkjajsd");
        d[u] = d[v] + w;
        if (w == 1)
          q.push_back(u);
        else
          q.push_front(u);
      }
    }
  }
  write((d[conv(enx, eny)] == INT32_MAX ? -1 : d[conv(enx, eny)]));
  /* FOR(21){
      write(i,d[i]);print();
  } */
}
int32_t main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
#ifndef ONLINE_JUDGE
  freopen("input.txt", "r", stdin);
  // /freopen("output.txt", "w", stdout);
#endif

  int tc = 1;

  // UNCOMMENT FOR TEST CASE
  // cin >> tc;
  FOR(tc) {
    // write("Case #", i+1, ": ");
    solve();
  }
}