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

#include <algorithm>
#include <iostream>
#include <utility>
#include <vector>
using namespace std;
using ll = long long;
using vll = vector<ll>;
using pll = pair<ll, ll>;
#define all(v) v.begin(), v.end()
const ll INF = 1e18;

void chmax(ll &a, ll b) {
  if (a < b)
    a = b;
}
void chmin(ll &a, ll b) {
  if (a > b)
    a = b;
}

int main() {
  ll n;
  cin >> n;
  vector<pll> u, d, l, r;
  for (int i = 0; i < n; i++) {
    ll x, y;
    cin >> x >> y;
    char c;
    cin >> c;
    if (c == 'U')
      u.emplace_back(x, y);
    if (c == 'D')
      d.emplace_back(x, y);
    if (c == 'L')
      l.emplace_back(x, y);
    if (c == 'R')
      r.emplace_back(x, y);
  }
  vector<pair<pll, char>> ud, lr, ur, ul, dr, dl;
  for (int i = 0; i < u.size(); i++) {
    ud.emplace_back(make_pair(u.at(i).first, u.at(i).second), 'U');
    ur.emplace_back(make_pair(u.at(i).first + u.at(i).second, u.at(i).first),
                    'U');
    ul.emplace_back(make_pair(u.at(i).first - u.at(i).second, u.at(i).first),
                    'U');
  }
  for (int i = 0; i < d.size(); i++) {
    ud.emplace_back(make_pair(d.at(i).first, d.at(i).second), 'D');
    dr.emplace_back(make_pair(d.at(i).first - d.at(i).second, d.at(i).first),
                    'D');
    dl.emplace_back(make_pair(d.at(i).first + d.at(i).second, d.at(i).first),
                    'D');
  }
  for (int i = 0; i < l.size(); i++) {
    lr.emplace_back(make_pair(l.at(i).second, l.at(i).first), 'L');
    ul.emplace_back(make_pair(l.at(i).first - l.at(i).second, l.at(i).first),
                    'L');
    dl.emplace_back(make_pair(l.at(i).first + l.at(i).second, l.at(i).first),
                    'L');
  }
  for (int i = 0; i < r.size(); i++) {
    lr.emplace_back(make_pair(r.at(i).second, r.at(i).first), 'R');
    ur.emplace_back(make_pair(r.at(i).first + r.at(i).second, r.at(i).first),
                    'R');
    dr.emplace_back(make_pair(r.at(i).first - r.at(i).second, r.at(i).first),
                    'R');
  }
  sort(all(ud));
  sort(all(lr));
  sort(all(ur));
  sort(all(ul));
  sort(all(dr));
  sort(all(dl));
  ll ans = INF;
  for (int i = 0; i + 1 < (int)ud.size(); i++)
    if (ud.at(i).first.first == ud.at(i + 1).first.first &&
        ud.at(i).second == 'U' && ud.at(i + 1).second == 'D')
      chmin(ans, (ud.at(i + 1).first.second - ud.at(i).first.second) * 5);
  for (int i = 0; i + 1 < (int)lr.size(); i++)
    if (lr.at(i).first.first == lr.at(i + 1).first.first &&
        lr.at(i).second == 'R' && lr.at(i + 1).second == 'L')
      chmin(ans, (lr.at(i + 1).first.second - lr.at(i).first.second) * 5);
  for (int i = 0; i + 1 < (int)ur.size(); i++)
    if (ur.at(i).first.first == ur.at(i + 1).first.first &&
        ur.at(i).second == 'R' && ur.at(i + 1).second == 'U')
      chmin(ans, (ur.at(i + 1).first.second - ur.at(i).first.second) * 10);
  for (int i = 0; i + 1 < (int)ul.size(); i++)
    if (ul.at(i).first.first == ul.at(i + 1).first.first &&
        ul.at(i).second == 'U' && ul.at(i + 1).second == 'L')
      chmin(ans, (ul.at(i + 1).first.second - ul.at(i).first.second) * 10);
  for (int i = 0; i + 1 < (int)dr.size(); i++)
    if (dr.at(i).first.first == dr.at(i + 1).first.first &&
        dr.at(i).second == 'R' && dr.at(i + 1).second == 'D')
      chmin(ans, (dr.at(i + 1).first.second - dr.at(i).first.second) * 10);
  for (int i = 0; i + 1 < (int)dl.size(); i++)
    if (dl.at(i).first.first == dl.at(i + 1).first.first &&
        dl.at(i).second == 'D' && dl.at(i + 1).second == 'L')
      chmin(ans, (dl.at(i + 1).first.second - dl.at(i).first.second) * 10);
  if (ans == INF)
    cout << "SAFE" << endl;
  else
    cout << ans << endl;
}

Error: 0

Fixed submission:

#include <algorithm>
#include <deque>
#include <iomanip>
#include <iostream>
#include <map>
#include <math.h>
#include <queue>
#include <set>
#include <stack>
#include <stdio.h>
#include <string>
#include <tuple>
#include <utility>
#include <vector>
using namespace std;
using ll = long long;
using ld = long double;
using vll = vector<ll>;
using vvll = vector<vll>;
using vc = vector<char>;
using vvc = vector<vc>;
using vb = vector<bool>;
using vvb = vector<vb>;
using pll = pair<ll, ll>;
#define all(v) v.begin(), v.end()
const ll INF = 1e18;
const ll mod = 1e9 + 7;
const double pie = acos(-1);
vll dx4 = {-1, 0, 1, 0};
vll dy4 = {0, -1, 0, 1};
vll dx8 = {-1, 0, 1, 1, 1, 0, -1, -1};
vll dy8 = {-1, -1, -1, 0, 1, 1, 1, 0};

void fix_cout() { cout << fixed << setprecision(20); }
ll gcd(ll a, ll b) {
  if (b == 0)
    return a;
  return gcd(b, a % b);
}
ll lcm(ll a, ll b) { return a / gcd(a, b) * b; }
void chmax(ll &a, ll b) {
  if (a < b)
    a = b;
}
void chmin(ll &a, ll b) {
  if (a > b)
    a = b;
}

int main() {
  ll n;
  cin >> n;
  vvll u(200001, vll(0)), d(200001, vll(0)), l(200001, vll(0)),
      r(200001, vll(0));
  for (int i = 0; i < n; i++) {
    ll x, y;
    char c;
    cin >> x >> y >> c;
    if (c == 'U')
      u.at(x).push_back(y);
    if (c == 'D')
      d.at(x).push_back(y);
    if (c == 'L')
      l.at(y).push_back(x);
    if (c == 'R')
      r.at(y).push_back(x);
  }
  for (int i = 0; i <= 200000; i++) {
    sort(all(u.at(i)));
    sort(all(d.at(i)));
    sort(all(l.at(i)));
    sort(all(r.at(i)));
  }
  ll ans = INF;
  for (int i = 0; i <= 200000; i++) {
    for (int j = 0; j < u.at(i).size(); j++) {
      auto itr = lower_bound(all(d.at(i)), u.at(i).at(j));
      if (itr != d.at(i).end())
        chmin(ans, (*itr - u.at(i).at(j)) * 5);
    }
  }
  for (int i = 0; i <= 200000; i++) {
    for (int j = 0; j < r.at(i).size(); j++) {
      auto itr = lower_bound(all(l.at(i)), r.at(i).at(j));
      if (itr != l.at(i).end())
        chmin(ans, (*itr - r.at(i).at(j)) * 5);
    }
  }
  vvll v1(400001, vll()), v2(400001, vll()), v3(400001, vll()),
      v4(400001, vll());
  for (int i = 0; i <= 200000; i++) {
    for (int j = 0; j < u.at(i).size(); j++) {
      v1.at(i + u.at(i).at(j)).push_back(i);
      v2.at(u.at(i).at(j) - i + 200000).push_back(i);
    }
  }
  for (int i = 0; i <= 200000; i++) {
    for (int j = 0; j < d.at(i).size(); j++) {
      v1.at(i + d.at(i).at(j)).push_back(i);
      v2.at(d.at(i).at(j) - i + 200000).push_back(i);
    }
  }
  for (int i = 0; i <= 200000; i++) {
    for (int j = 0; j < r.at(i).size(); j++) {
      auto itr = lower_bound(all(v1.at(i + r.at(i).at(j))), i);
      if (itr != v1.at(i + r.at(i).at(j)).end())
        chmin(ans, (*itr - i) * 10);
      itr = lower_bound(all(v4.at(i - r.at(i).at(j) + 200000)), i);
      if (itr != v4.at(i - r.at(i).at(j) + 200000).end())
        chmin(ans, (*itr - i) * 10);
    }
  }
  for (int i = 0; i <= 200000; i++) {
    for (int j = 0; j < l.at(i).size(); j++) {
      auto itr = lower_bound(all(v2.at(i - r.at(i).at(j) + 200000)), i);
      if (itr != v1.at(i - r.at(i).at(j) + 200000).begin())
        chmin(ans, (i - *(itr - 1)) * 10);
      itr = lower_bound(all(v3.at(i + r.at(i).at(j))), i);
      if (itr != v4.at(i + r.at(i).at(j)).begin())
        chmin(ans, (i - *(itr - 1)) * 10);
    }
  }
  if (ans == INF)
    cout << "SAFE\\n";
  else
    cout << ans << endl;
}