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

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ld = long double;

ll power(ll x, ll y);
#define repp(I, A, B) for (int I = A; I <= B; I++)
#define rep(I, A, B) for (int I = A; I < B; I++)
#define rrep(I, B, A) for (int I = B; I >= A; I--)
#define pb emplace_back
#define ff first
#define ss second
#define all(v) v.begin(), v.end()
#define rall(v) v.rbegin(), v.rend()
#define LB lower_bound
#define UB upper_bound
#define MP make_pair
#define mem(A, B) memset(A, B, sizeof(A));
#define mem0(A) memset(A, 0, sizeof(A));
#define quickio                                                                \\
  ios_base::sync_with_stdio(0);                                                \\
  cin.tie(0);                                                                  \\
  cout.tie(0);
#define debug(this) cerr << "> " << #this << " : " << this << "\\n"
#define bitcount(n) __builtin_popcountll(n)
#define in_edges(M)                                                            \\
  repp(I, 1, M) {                                                              \\
    int A, B;                                                                  \\
    cin >> A >> B;                                                             \\
    v[A].pb(B), v[B].pb(A);                                                    \\
  }
#define in_edges2(M)                                                           \\
  repp(I, 1, M) {                                                              \\
    int A, B;                                                                  \\
    cin >> A >> B;                                                             \\
    v[A].pb(B);                                                                \\
  }
#define in_edges3(M)                                                           \\
  repp(I, 1, M) {                                                              \\
    int A, B, C;                                                               \\
    cin >> A >> B >> C;                                                        \\
    v[A].pb(B, C), v[B].pb(A, C);                                              \\
  }
#define endl "\\n"

const int inf = 2e9;
const int N = 5e5 + 20;

set<pair<int, int>> U[N], D[N], L[N], R[N];
set<pair<int, int>> UU[N], DD[N], LL[N], RR[N];
set<int> DY[N], UY[N], LX[N], RX[N];

bool cum(pair<int, int> a, pair<int, int> b) { return b.ss <= a.ss; }

int main() // PointBlank's code ¯\\_(ツ)_/¯
{
  quickio vector<pair<int, int>> u, d, l, r;
  int n;
  cin >> n;
  rep(i, 0, n) {
    int x, y;
    char s;
    cin >> x >> y >> s;
    if (s == 'U')
      u.pb(x, y), UY[x].emplace(y);
    if (s == 'D')
      d.pb(x, y), DY[x].emplace(y);
    if (s == 'L')
      l.pb(x, y), LX[y].emplace(x);
    if (s == 'R')
      r.pb(x, y), RX[y].emplace(x);
  }

  sort(all(u));
  sort(all(d));
  sort(all(l));
  sort(all(r));
  for (auto i : u)
    U[i.ff + i.ss].emplace(i);
  for (auto i : d)
    D[i.ff + i.ss].emplace(i);
  for (auto i : l)
    L[i.ff + i.ss].emplace(i);
  for (auto i : r)
    R[i.ff + i.ss].emplace(i);
  for (auto i : u)
    UU[i.ff - i.ss + 200005].emplace(i);
  for (auto i : d)
    DD[i.ff - i.ss + 200005].emplace(i);
  for (auto i : l)
    LL[i.ff - i.ss + 200005].emplace(i);
  for (auto i : r)
    RR[i.ff - i.ss + 200005].emplace(i);

  int mn = inf, mm = inf;

  for (auto i : u) {
    auto it = DY[i.ff].UB(i.ss);
    if (it != DY[i.ff].end()) {
      mm = min(abs(*it - i.ss), mm);
    }
  }

  for (auto i : r) {
    auto it = LX[i.ss].UB(i.ff);
    if (it != LX[i.ss].end()) {
      mm = min(abs(*it - i.ff), mm);
    }
  }

  repp(i, 1, 400005) {
    for (auto j : R[i]) {
      auto a = U[i].UB(j);
      if (a != U[i].end())
        mn = min(mn, (*a).ff - j.ff);
    }
    for (auto j : D[i]) {
      auto a = L[i].UB(j);
      if (a != L[i].end())
        mn = min(mn, (*a).ff - j.ff);
    }
  }

  repp(i, 1, 400005) {
    for (auto j : UU[i]) {
      auto a = LL[i].UB(j);
      if (a != LL[i].end())
        mn = min(mn, (*a).ff - j.ff);
    }

    for (auto j : RR[i]) {
      auto a = DD[i].UB(j);
      if (a != DD[i].end())
        mn = min(mn, (*a).ff - j.ff);
    }
  }

  ll res = 2e18;
  if (mn != inf)
    res = min(res, (ll)mn * 10);
  if (mm != inf)
    res = min(res, mm * 5LL);

  ll xx = 2e18;
  if (res != xx)
    cout << res;
  else
    cout << "SAFE";
}

Error: -11

Fixed submission:

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ld = long double;

ll power(ll x, ll y);
#define repp(I, A, B) for (int I = A; I <= B; I++)
#define rep(I, A, B) for (int I = A; I < B; I++)
#define rrep(I, B, A) for (int I = B; I >= A; I--)
#define pb emplace_back
#define ff first
#define ss second
#define all(v) v.begin(), v.end()
#define rall(v) v.rbegin(), v.rend()
#define LB lower_bound
#define UB upper_bound
#define MP make_pair
#define mem(A, B) memset(A, B, sizeof(A));
#define mem0(A) memset(A, 0, sizeof(A));
#define quickio                                                                \\
  ios_base::sync_with_stdio(0);                                                \\
  cin.tie(0);                                                                  \\
  cout.tie(0);
#define debug(this) cerr << "> " << #this << " : " << this << "\\n"
#define bitcount(n) __builtin_popcountll(n)
#define in_edges(M)                                                            \\
  repp(I, 1, M) {                                                              \\
    int A, B;                                                                  \\
    cin >> A >> B;                                                             \\
    v[A].pb(B), v[B].pb(A);                                                    \\
  }
#define in_edges2(M)                                                           \\
  repp(I, 1, M) {                                                              \\
    int A, B;                                                                  \\
    cin >> A >> B;                                                             \\
    v[A].pb(B);                                                                \\
  }
#define in_edges3(M)                                                           \\
  repp(I, 1, M) {                                                              \\
    int A, B, C;                                                               \\
    cin >> A >> B >> C;                                                        \\
    v[A].pb(B, C), v[B].pb(A, C);                                              \\
  }
#define endl "\\n"

const int inf = 2e9;
const int N = 4e5 + 5;

set<pair<int, int>> U[N], D[N], L[N], R[N];
set<pair<int, int>> UU[N], DD[N], LL[N], RR[N];
set<pair<int, int>> U0[N], D0[N], L0[N], R0[N];
set<pair<int, int>> U1[N], D1[N], L1[N], R1[N];
set<int> DY[N], UY[N], LX[N], RX[N];

bool cum(pair<int, int> a, pair<int, int> b) { return b.ss <= a.ss; }

int main() // PointBlank's code ¯\\_(ツ)_/¯
{
  quickio vector<pair<int, int>> u, d, l, r;
  int n;
  cin >> n;
  rep(i, 0, n) {
    int x, y;
    char s;
    cin >> x >> y >> s;
    if (s == 'U')
      u.pb(x, y), UY[x].emplace(y);
    if (s == 'D')
      d.pb(x, y), DY[x].emplace(y);
    if (s == 'L')
      l.pb(x, y), LX[y].emplace(x);
    if (s == 'R')
      r.pb(x, y), RX[y].emplace(x);
  }

  sort(all(u));
  sort(all(d));
  sort(all(l));
  sort(all(r));
  for (auto i : u)
    U[i.ff + i.ss].emplace(i);
  for (auto i : d)
    D[i.ff + i.ss].emplace(i);
  for (auto i : l)
    L[i.ff + i.ss].emplace(i);
  for (auto i : r)
    R[i.ff + i.ss].emplace(i);
  for (auto i : u)
    UU[i.ff + i.ss + 200000].emplace(i);
  for (auto i : d)
    DD[i.ff + i.ss + 200000].emplace(i);
  for (auto i : l)
    LL[i.ff + i.ss + 200000].emplace(i);
  for (auto i : r)
    RR[i.ff + i.ss + 200000].emplace(i);

  int mn = inf, mm = inf;

  for (auto i : u) {
    auto it = DY[i.ff].UB(i.ss);
    if (it != DY[i.ff].end()) {
      mm = min(abs(*it - i.ss), mm);
    }
  }

  for (auto i : r) {
    auto it = LX[i.ss].UB(i.ss);
    if (it != LX[i.ss].end()) {
      mm = min(abs(*it - i.ff), mm);
    }
  }

  repp(i, 1, 400000) {
    for (auto j : R[i]) {
      auto a = U[i].UB(j);
      if (a != U[i].end())
        mn = min(mn, (*a).ff - j.ff);
    }
    for (auto j : D[i]) {
      auto a = L[i].UB(j);
      if (a != L[i].end())
        mn = min(mn, (*a).ff - j.ff);
    }
  }

  repp(i, 1, 400000) {
    for (auto j : UU[i]) {
      auto a = LL[i].UB(j);
      if (a != LL[i].end())
        mn = min(mn, (*a).ff - j.ff);
    }

    for (auto j : RR[i]) {
      auto a = DD[i].UB(j);
      if (a != DD[i].end())
        mn = min(mn, (*a).ff - j.ff);
    }
  }

  if (mn != inf)
    mn *= 10;
  if (mm != inf)
    mm = (mm / 2) * 10;

  mn = min(mn, mm);
  if (mn != inf)
    cout << mn;
  else
    cout << "SAFE";
}