Problem p02580 (C++) — buggy submission, verdict: Time Limit Exceeded

// #pragma GCC oplmize(2)
//  #pragma GCC optimize("Ofast")
//  #pragma GCC target("avx,avx2,fma")
//  #pragma GCC optimization ("unroll-loops")
#include <bits/stdc++.h>
#define ll int
#define sc(x) scanf("%d", &x)
#define scs(x) scanf("%s", x + 1)
#define pr(x) printf("%d\\n", x)
#define prs(x) printf("%s\\n", x)
using namespace std;
const int maxn = 3e5 + 5;
const int mod = 1e9 + 7;
const double pi = acos(-1.0);
const double eps = 1e-8;
ll h, w, m, a[maxn], b[maxn], x, y, mx, my, idx, idy, ma;
map<pair<ll, ll>, ll> mp;
vector<ll> v1;
vector<ll> v2;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  sc(h), sc(w), sc(m);
  for (int i = 1; i <= m; i++) {
    sc(x), sc(y);
    a[x]++;
    b[y]++;
    mp[{x, y}]++;
    mx = max(mx, a[x]);
    my = max(my, b[y]);
  }
  for (int i = 1; i <= h; i++) {
    if (a[i] == mx)
      v1.push_back(i);
  }
  for (int i = 1; i <= w; i++) {
    if (b[i] == my)
      v2.push_back(i);
  }
  for (int i = 0; i < v1.size(); i++) {
    for (int j = 0; j < v2.size(); j++) {
      if (mp[{v1[i], v2[j]}] == 0) {
        pr(mx + my);
        return 0;
      }
    }
  }
  pr(mx + my - 1);
  return 0;
}


Error: TLE

Fixed submission:

#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize("Ofast")
#pragma GCC optimize("inline")
#pragma GCC optimize("-fgcse")
#pragma GCC optimize("-fgcse-lm")
#pragma GCC optimize("-fipa-sra")
#pragma GCC optimize("-ftree-pre")
#pragma GCC optimize("-ftree-vrp")
#pragma GCC optimize("-fpeephole2")
#pragma GCC optimize("-ffast-math")
#pragma GCC optimize("-fsched-spec")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("-falign-jumps")
#pragma GCC optimize("-falign-loops")
#pragma GCC optimize("-falign-labels")
#pragma GCC optimize("-fdevirtualize")
#pragma GCC optimize("-fcaller-saves")
#pragma GCC optimize("-fcrossjumping")
#pragma GCC optimize("-fthread-jumps")
#pragma GCC optimize("-funroll-loops")
#pragma GCC optimize("-fwhole-program")
#pragma GCC optimize("-freorder-blocks")
#pragma GCC optimize("-fschedule-insns")
#pragma GCC optimize("inline-functions")
#pragma GCC optimize("-ftree-tail-merge")
#pragma GCC optimize("-fschedule-insns2")
#pragma GCC optimize("-fstrict-aliasing")
#pragma GCC optimize("-fstrict-overflow")
#pragma GCC optimize("-falign-functions")
#pragma GCC optimize("-fcse-skip-blocks")
#pragma GCC optimize("-fcse-follow-jumps")
#pragma GCC optimize("-fsched-interblock")
#pragma GCC optimize("-fpartial-inlining")
#pragma GCC optimize("no-stack-protector")
#pragma GCC optimize("-freorder-functions")
#pragma GCC optimize("-findirect-inlining")
#pragma GCC optimize("-fhoist-adjacent-loads")
#pragma GCC optimize("-frerun-cse-after-loop")
#pragma GCC optimize("inline-small-functions")
#pragma GCC optimize("-finline-small-functions")
#pragma GCC optimize("-ftree-switch-conversion")
#pragma GCC optimize("-foptimize-sibling-calls")
#pragma GCC optimize("-fexpensive-optimizations")
#pragma GCC optimize("-funsafe-loop-optimizations")
#pragma GCC optimize("inline-functions-called-once")
#pragma GCC optimize("-fdelete-null-pointer-checks")
#include <bits/stdc++.h>
#define ll int
#define sc(x) scanf("%d", &x)
#define scs(x) scanf("%s", x + 1)
#define pr(x) printf("%d\\n", x)
#define prs(x) printf("%s\\n", x)
using namespace std;
const int maxn = 3e5 + 5;
const int mod = 1e9 + 7;
const double pi = acos(-1.0);
const double eps = 1e-8;
ll h, w, m, a[maxn], b[maxn], x, y, mx, my, idx, idy, ma;
map<pair<ll, ll>, ll> mp;
vector<ll> v1;
vector<ll> v2;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  sc(h), sc(w), sc(m);
  for (int i = 1; i <= m; i++) {
    sc(x), sc(y);
    a[x]++;
    b[y]++;
    mp[{x, y}]++;
    mx = max(mx, a[x]);
    my = max(my, b[y]);
  }
  for (int i = 1; i <= h; i++) {
    if (a[i] == mx)
      v1.push_back(i);
  }
  for (int i = 1; i <= w; i++) {
    if (b[i] == my)
      v2.push_back(i);
  }
  for (int i = 0; i < v1.size(); i++) {
    for (int j = 0; j < v2.size(); j++) {
      if (mp[{v1[i], v2[j]}] != 0)
        ma = max(ma, mx + my - 1);
      else
        ma = max(ma, mx + my);
    }
  }
  pr(ma);
  return 0;
}