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

#pragma GCC optimize("O2")
#pragma GCC target("avx2")
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define rep(i, n) for (int i = 0; i < (n); i++)
#define rep1(i, n) for (int i = 1; i <= (n); i++)
#define co(x) cout << (x) << "\\n"
#define cosp(x) cout << (x) << " "
#define ce(x) cerr << (x) << "\\n"
#define cesp(x) cerr << (x) << " "
#define pb push_back
#define mp make_pair
#define chmin(x, y) x = min(x, y)
#define chmax(x, y) x = max(x, y)
#define Would
#define you
#define please

set<int> XU[200001], XD[200001], YL[200001], YR[200001];

set<int> PU[400001], PD[400001], PL[400001], PR[400001];
set<int> MU[400001], MD[400001], ML[400001], MR[400001];

int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);

  int N;
  cin >> N;

  rep(i, N) {
    int X, Y;
    char C;
    cin >> X >> Y >> C;

    if (C == 'U') {
      XU[X].insert(Y);
      PU[X + Y].insert(Y);
      MU[X - Y + 200000].insert(Y);
    }
    if (C == 'D') {
      XD[X].insert(Y);
      PD[X + Y].insert(Y);
      MD[X - Y + 200000].insert(Y);
    }
    if (C == 'R') {
      YR[Y].insert(X);
      PR[X + Y].insert(X);
      MR[X - Y + 200000].insert(X);
    }
    if (C == 'L') {
      YL[Y].insert(X);
      PL[X + Y].insert(X);
      ML[X - Y + 200000].insert(X);
    }
  }

  int kotae = 2e9;
  rep(i, 200001) {
    auto U = XU[i].begin(), D = XD[i].begin();
    while (U != XU[i].end()) {
      while (D != XD[i].end() && *U > *D) {
        D++;
      }
      if (D != XD[i].end())
        chmin(kotae, (*D - *U) * 5);
      U++;
    }
  }
  rep(i, 200001) {
    auto U = YR[i].begin(), D = YL[i].begin();
    while (U != YR[i].end()) {
      while (D != YL[i].end() && *U > *D) {
        D++;
      }
      if (D != YL[i].end())
        chmin(kotae, (*D - *U) * 5);
      U++;
    }
  }

  rep(i, 400001) {
    if (PR[i].size() && PU[i].size()) {
      auto A = PR[i].begin(), B = --PU[i].end();
      while (A != PR[i].end()) {
        while (B != PU[i].begin() && *A + *(B) > i) {
          B--;
        }
        if (*A + *B < i)
          chmin(kotae, 10 * (i - (*A + *B)));
        A++;
      }
    }
  }
  rep(i, 400001) {
    if (PD[i].size() && PL[i].size()) {
      auto A = --PD[i].end(), B = PL[i].begin();
      while (A != PD[i].begin()) {
        while (B != PL[i].end() && *A + *(B) < i) {
          B++;
        }
        if (B != PL[i].end())
          chmin(kotae, 10 * ((*A + *B) - i));
        A--;
      }
      while (B != PL[i].end() && *A + *(B) < i) {
        B++;
      }
      if (B != PL[i].end())
        chmin(kotae, 10 * ((*A + *B) - i));
    }
  }
  rep(i, 400001) {
    if (MR[i].size() && MD[i].size()) {
      auto A = MR[i].begin(), B = MD[i].begin();
      while (A != MR[i].end()) {
        while (B != MD[i].end() && *A - *B > i - 200000) {
          B++;
        }
        if (B != MD[i].end())
          chmin(kotae, 10 * (i + *B - *A - 200000));
        A++;
      }
    }
  }
  rep(i, 400001) {
    if (MU[i].size() && ML[i].size()) {
      auto A = MU[i].begin(), B = ML[i].begin();
      while (A != MU[i].end()) {
        while (B != ML[i].end() && *B - *A < i - 200000) {
          B++;
        }
        if (B != ML[i].end())
          chmin(kotae, 10 * (*B - *A - i + 200000));
        A++;
      }
    }
  }

  if (kotae > 1e9)
    co("SAFE");
  else
    co(kotae);

  Would you please return 0;
}

Error: -11

Fixed submission:

#pragma GCC optimize("O2")
#pragma GCC target("avx2")
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define rep(i, n) for (int i = 0; i < (n); i++)
#define rep1(i, n) for (int i = 1; i <= (n); i++)
#define co(x) cout << (x) << "\\n"
#define cosp(x) cout << (x) << " "
#define ce(x) cerr << (x) << "\\n"
#define cesp(x) cerr << (x) << " "
#define pb push_back
#define mp make_pair
#define chmin(x, y) x = min(x, y)
#define chmax(x, y) x = max(x, y)
#define Would
#define you
#define please

int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);

  int N;
  cin >> N;

  set<int> XU[200001], XD[200001], YL[200001], YR[200001];

  set<int> PU[400001], PD[400001], PL[400001], PR[400001];
  set<int> MU[400001], MD[400001], ML[400001], MR[400001];

  rep(i, N) {
    int X, Y;
    char C;
    cin >> X >> Y >> C;

    if (C == 'U') {
      XU[X].insert(Y);
      PU[X + Y].insert(Y);
      MU[X - Y + 200000].insert(Y);
    }
    if (C == 'D') {
      XD[X].insert(Y);
      PD[X + Y].insert(Y);
      MD[X - Y + 200000].insert(Y);
    }
    if (C == 'R') {
      YR[Y].insert(X);
      PR[X + Y].insert(X);
      MR[X - Y + 200000].insert(X);
    }
    if (C == 'L') {
      YL[Y].insert(X);
      PL[X + Y].insert(X);
      ML[X - Y + 200000].insert(X);
    }
  }

  int kotae = 2e9;
  rep(i, 200001) {
    auto U = XU[i].begin(), D = XD[i].begin();
    while (U != XU[i].end()) {
      while (D != XD[i].end() && *U > *D) {
        D++;
      }
      if (D != XD[i].end())
        chmin(kotae, (*D - *U) * 5);
      U++;
    }
  }
  rep(i, 200001) {
    auto U = YR[i].begin(), D = YL[i].begin();
    while (U != YR[i].end()) {
      while (D != YL[i].end() && *U > *D) {
        D++;
      }
      if (D != YL[i].end())
        chmin(kotae, (*D - *U) * 5);
      U++;
    }
  }

  rep(i, 400001) {
    auto A = PR[i].begin(), B = --PU[i].end();
    while (A != PR[i].end()) {
      while (B != PU[i].begin() && *A + *(B) > i) {
        B--;
      }
      if (*A + *B < i)
        chmin(kotae, 10 * (i - (*A + *B)));
      A++;
    }
  }
  rep(i, 400001) {
    if (PD[i].size()) {
      auto A = --PD[i].end(), B = PL[i].begin();
      while (A != PD[i].begin()) {
        while (B != PL[i].end() && *A + *(B) < i) {
          B++;
        }
        if (B != PL[i].end())
          chmin(kotae, 10 * ((*A + *B) - i));
        A--;
      }
      while (B != PL[i].end() && *A + *(B) < i) {
        B++;
      }
      if (B != PL[i].end())
        chmin(kotae, 10 * ((*A + *B) - i));
    }
  }
  rep(i, 400001) {
    auto A = MR[i].begin(), B = MD[i].begin();
    while (A != MR[i].end()) {
      while (B != MD[i].end() && *A - *(B) < i) {
        B++;
      }
      if (B != MD[i].end())
        chmin(kotae, 10 * (*A - *B - i));
      A++;
    }
  }
  rep(i, 400001) {
    auto A = MU[i].begin(), B = ML[i].begin();
    while (A != MU[i].end()) {
      while (B != ML[i].end() && *(B) - *A < i) {
        B++;
      }
      if (B != ML[i].end())
        chmin(kotae, 10 * (*B - *A - i));
      A++;
    }
  }

  if (kotae > 1e9)
    co("SAFE");
  else
    co(kotae);

  Would you please return 0;
}