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

#include <algorithm>
#include <bitset>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iomanip>
#include <iostream>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <vector>

using ll = long long;
using ull = unsigned long long;
using namespace std;

#define FALSE printf("false\\n");
#define TRUE printf("true\\n");
#define all(x) (x).begin(), (x).end()
#define rep(i, n) for (int i = 0; (i) < ((int)(n)); ++(i))
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define UNIQUE(v) v.erase(unique(v.begin(), v.end()), v.end())
#define test(a)                                                                \\
  cout << "line:" << __LINE__ << "[" << (#a) << ": " << (a) << "]" << endl

const int INF = 1e9 + 7;
const ll INFL = 9 * 1e18;

// const int dx[4] = { 1, 0, -1, 0 };
// const int dy[4] = { 0, 1, 0, -1 };

const int dx[8] = {1, 1, 0, -1, -1, -1, 0, 1};
const int dy[8] = {0, 1, 1, 1, 0, -1, -1, -1};

ll inline digit(ll num) {
  int tmp = 0;
  while (num) {
    tmp++;
    num /= 10;
  }
  return tmp;
} // 桁数
template <typename T> inline void print(T &&x) {
  cout << x << endl;
} // 改行付き出力
template <typename T> inline T SUM(vector<T> vec) {
  return accumulate(all(vec), (T)0);
} // vectorの中身を全部足す
template <typename T> inline T digitSum(T num) {
  T sum = 0;
  while (num) {
    sum += num % 10;
    num /= 10;
  }
  return sum;
} // 各桁の和
template <typename T> inline T gcd(T a, T b) {
  if (b == 0)
    return a;
  return gcd(b, a % b);
} // 最大公約数
template <typename T> inline T lcm(T a, T b) {
  T g = gcd(a, b);
  return a / g * b;
} // 最小公倍数
template <typename T> inline T power(T a, T b) {
  T tmp = 1;
  rep(i, b) { tmp *= a; }
  return tmp;
} // 累乗
template <class T> inline bool chmax(T &a, T b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T> inline bool chmin(T &a, T b) {
  if (a > b) {
    a = b;
    return 1;
  }
  return 0;
}
int ctoi(char c) { return c - '0'; }

// TODO: write
int main() {
  int h, w, n;
  cin >> h >> w >> n;
  vector<int> vH(h, 0);
  vector<int> vW(w, 0);
  set<pair<int, int>> hw;

  rep(i, n) {
    int hi, wi;
    cin >> hi >> wi;
    hi--;
    wi--;
    vH[hi]++;
    vW[wi]++;
    hw.emplace(hi, wi);
  }

  int maxH = 0;
  int maxW = 0;
  rep(i, h) chmax(maxH, vH[i]);
  rep(i, w) chmax(maxW, vW[i]);

  vector<int> hPoint, wPoint;
  rep(i, h) if (maxH == vH[i]) hPoint.push_back(i);
  rep(i, w) if (maxW == vW[i]) wPoint.push_back(i);

  int ans = maxH + maxW - 1;

  for (int i : hPoint) {
    for (int j : wPoint) {
      if (!hw.count(mp(i, j))) {
        print(ans + 1);
        return 0;
      }
    }
  }

  print(ans);
  return 0;
}

Error: 0

Fixed submission:

#include <algorithm>
#include <bitset>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iomanip>
#include <iostream>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <vector>

using ll = long long;
using ull = unsigned long long;
using namespace std;

#define FALSE printf("false\\n");
#define TRUE printf("true\\n");
#define all(x) (x).begin(), (x).end()
#define rep(i, n) for (int i = 0; (i) < ((int)(n)); ++(i))
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define UNIQUE(v) v.erase(unique(v.begin(), v.end()), v.end())
#define test(a)                                                                \\
  cout << "line:" << __LINE__ << "[" << (#a) << ": " << (a) << "]" << endl

const int INF = 1e9 + 7;
const ll INFL = 9 * 1e18;

// const int dx[4] = { 1, 0, -1, 0 };
// const int dy[4] = { 0, 1, 0, -1 };

const int dx[8] = {1, 1, 0, -1, -1, -1, 0, 1};
const int dy[8] = {0, 1, 1, 1, 0, -1, -1, -1};

ll inline digit(ll num) {
  int tmp = 0;
  while (num) {
    tmp++;
    num /= 10;
  }
  return tmp;
} // 桁数
template <typename T> inline void print(T &&x) {
  cout << x << endl;
} // 改行付き出力
template <typename T> inline T SUM(vector<T> vec) {
  return accumulate(all(vec), (T)0);
} // vectorの中身を全部足す
template <typename T> inline T digitSum(T num) {
  T sum = 0;
  while (num) {
    sum += num % 10;
    num /= 10;
  }
  return sum;
} // 各桁の和
template <typename T> inline T gcd(T a, T b) {
  if (b == 0)
    return a;
  return gcd(b, a % b);
} // 最大公約数
template <typename T> inline T lcm(T a, T b) {
  T g = gcd(a, b);
  return a / g * b;
} // 最小公倍数
template <typename T> inline T power(T a, T b) {
  T tmp = 1;
  rep(i, b) { tmp *= a; }
  return tmp;
} // 累乗
template <class T> inline bool chmax(T &a, T b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T> inline bool chmin(T &a, T b) {
  if (a > b) {
    a = b;
    return 1;
  }
  return 0;
}
int ctoi(char c) { return c - '0'; }

// TODO: write
int main() {
  int h, w, n;
  cin >> h >> w >> n;
  vector<int> vH(h, 0);
  vector<int> vW(w, 0);
  vector<vector<int>> vHW(h, vector<int>(w, 0));
  rep(i, n) {
    int hi, wi;
    cin >> hi >> wi;
    hi--;
    wi--;
    vH[hi]++;
    vW[wi]++;
    vHW[hi][wi]++;
  }
  int ans = 0;
  rep(i, h) {
    rep(j, w) { chmax(ans, vH[i] + vW[j] - vHW[i][j]); }
  }
  print(ans);
  return 0;
}