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

#include "bits/stdc++.h"
#define fast                                                                   \\
  ios_base::sync_with_stdio(false);                                            \\
  cin.tie(NULL);                                                               \\
  cout.tie(NULL)
#define ll long long int
#define inf 1e18 + 5
#define sr string
#define mod 1000000007
#define start                                                                  \\
  int t;                                                                       \\
  cin >> t;                                                                    \\
  while (t--)
#define db(x) cout << #x << "=" << x << "\\n"
#define db2(a, b) cout << #a << ": " << a << " , " << #b << ": " << b << endl;
#define db3(a, b, c)                                                           \\
  cout << #a << ": " << a << " , " << #b << ": " << b << " , " << #c << ": "   \\
       << c << endl;
#define forr(i, n) for (int i = 0; i < n; i++)
#define fr(i, n) for (int i = 1; i <= n; i++)
#define rep(i, j, k) for (int i = j; i < k; i++)
#define rp(i, j, k) for (int i = j; i <= k; i++)
#define nn "\\n"
#define en "\\n"
#define vvi vector<vector<int>>
#define vi vector<int>
#define si set<int>
#define mlsi multiset<int>
#define vc vector<char>
#define vli vector<long long int>
#define vpii vector<pair<int, int>>
#define pii pair<int, int>
#define mii map<int, int>
#define msi map<string, int>
#define mci map<char, int>
#define umii unordered_map<int, int>
#define umsi unordered_map<string, int>
#define umci unordered_map<char, int>
#define mkp make_pair
#define pb push_back
#define eb emplace_back
#define all(x) x.begin(), x.end()
#define sortv(x) sort(x.begin(), x.end())
#define sorta(x, n) sort(x, x + n)
#define sorted(x) is_sorted(x.begin(), x, end())
#define print_all(x)                                                           \\
  for (auto t : x)                                                             \\
    cout << t << " ";                                                          \\
  cout << en;
#define mxe(x) *max_element(all(x))
#define mne(x) *min_element(all(x))
#define go(x) for (auto &[u, v] : x)
#define in(x) cin >> x
#define in2(x, y) cin >> x >> y
#define in3(x, y, z) cin >> x >> y >> z
#define in4(x, y, z, v) cin >> x >> y >> z >> v
#define oo(x) cout << x << endl
#define oo2(x, y) cout << x << " " << y << endl
#define oo3(x, y, z) cout << x << " " << y << " " << z << endl
#define ood(n, x) cout << fixed << setprecision(n) << x << "\\n"
#define sz(x) x.size()
#define ff first
#define ss second
#define ooy cout << "YES\\n"
#define oon cout << "NO\\n"
#define rr return
#define cc continue

using namespace std;

ll mod_pow(ll x, int n) {
  if (n == 0)
    return 1;
  ll res = 1;
  while (n > 0) {
    if (n & 1)
      res = res * x % mod;
    x = x * x % mod;
    n >>= 1;
  }

  return res;
}
vector<ll> allDivisors(ll n) {
  vector<ll> v;
  for (ll i = 1; i <= sqrt(n); i++) {
    if (n % i == 0) {
      if (n / i == i)
        v.pb(i);

      else {
        v.pb(i);
        v.pb(n / i);
      }
    }
  }
  return v;
}
bool isPalin(string s) {
  for (int i = 0; i < s.size() / 2; i++) {
    if (s[i] != s[s.size() - i - 1]) {
      return false;
    }
  }
  return true;
}

vi z_algo(string s) {
  int n = sz(s);
  int l = 0, r = 0;
  vi z(n);
  for (ll i = 1; i < n; i++) {
    if (i > r) {
      l = r = i;
      while (r < n && s[r] == s[r - l]) {
        r++;
      }
      z[i] = r - l;
      r--;
    } else {
      ll index = i - l;
      if (i + z[index] <= r)
        z[i] = z[index];
      else {
        l = i;
        while (r < n && s[r] == s[r - l]) {
          r++;
        }
        z[i] = r - l;
        r--;
      }
    }
  }
  return z;
}

vi z_match(string str, string pat) {
  string total = pat + "$" + str;
  vi z = z_algo(total);
  vi ans;
  forr(i, z.size()) {
    if (z[i] == pat.size()) {
      ans.pb(i - 1 - pat.size());
    }
  }
  return ans;
}

vi kmp(string s) {
  int n = (int)s.length();
  vector<int> pi(n);
  for (int i = 1; i < n; i++) {
    int j = pi[i - 1];
    while (j > 0 && s[i] != s[j])
      j = pi[j - 1];
    if (s[i] == s[j])
      j++;
    pi[i] = j;
  }
  return pi;
}

vi kmp_match(string str, string pat) {
  string total = pat + "$" + str;
  int n = sz(total);
  vi ans = kmp(total);
  vi res;
  for (int i = pat.size() + 1; i < n; i++) {
    if (ans[i] == pat.size()) {
      res.pb(i - 2 * pat.size());
    }
  }
  return res;
}

bool isPrime(ll n) {
  int skip = 0;
  if (n < 2)
    return false;
  else if (n == 2)
    return true;
  ll limit = sqrt(n);
  if (n % 2 == 0)
    return false;
  for (int j = 3; j <= limit; j += 2) {
    if (n % j == 0)
      return false;
  }
  return true;
}

ll kadane(vli &a, int n) {
  ll curr = a[0];
  ll ans = a[0];
  fr(i, n - 1) {
    curr += a[i % n];
    ans = max(ans, curr);
    curr = max(curr, 0LL);
  }
  return ans;
}

bool comp(const pair<ll, ll> &a, const pair<ll, ll> &b) {
  if (a.first == b.first) {
    return a.second < b.second;
  } else {
    return a.second < b.second;
  }
}

ll binpow(ll a, ll b) {
  if (b == 0)
    return 1;
  ll res = binpow(a, b / 2);
  if (b % 2)
    return res * res * a;
  else
    return res * res;
}

/*void sieve(int N)
{
    for (int p=2; p*p<=N; p++)
    {
        if (prime[p] == false)
        {
            for (int i=p*p; i<=N; i += p)
                prime[i] = true;
        }
    }
} */

void read(vli &a, int n) {
  a.resize(n);
  forr(i, n) cin >> a[i];
}

// Stay honest with yourself
// Read the constraints carefully Mridul
// Jay Shree Krishna
// You Can Do this

bool fine = 0;
vli a;
const int mx = 300004;
map<int, bool> bombs[mx];
void solve() {

  ll x, y, m;
  in3(x, y, m);
  ll cpy = m;
  vli row(x + 1, 0), col(y + 1, 0);
  vi mrow, mcol;

  ll x1 = -1, y1 = -1;
  while (cpy--) {
    in2(x, y);
    row[x]++;
    col[y]++;
    x1 = max(x1, row[x]);
    y1 = max(y1, col[y]);
    bombs[x][y] = 1;
  }
  x = sz(row);
  y = sz(col);
  forr(i, x) {
    if (row[i] == x1)
      mrow.pb(i);
  }
  forr(i, y) {
    if (col[i] == y1)
      mcol.pb(i);
  }
  ll ans = 0;
  ll count = 0;
  for (int i = 0; i < sz(mrow); i++) {
    forr(j, sz(mcol)) {
      count++;
      if (count > 2 * 300004)
        break;
      ll temp = x1 + y1 - bombs[mrow[i]][mcol[j]];
      // db(temp);
      if (bombs[mrow[i]][mcol[j]] == 0) {
        oo(temp);
        return;
      }
      ans = max(ans, temp);
    }
    if (count > 2 * 300004)
      break;
  }
  oo(ans);
}

int main() {
  /* #ifndef ONLINE_JUDGE
   freopen("input1.txt", "r", stdin);
   freopen("error.txt", "w", stderr);
  freopen("output1.txt", "w", stdout);
   #endif*/
  fast;
  if (fine) {
    start { solve(); }
  } else
    solve();
  return 0;
}

Error: TLE

Fixed submission:

#include "bits/stdc++.h"
#define fast                                                                   \\
  ios_base::sync_with_stdio(false);                                            \\
  cin.tie(NULL);                                                               \\
  cout.tie(NULL)
#define ll long long int
#define inf 1e18 + 5
#define sr string
#define mod 1000000007
#define start                                                                  \\
  int t;                                                                       \\
  cin >> t;                                                                    \\
  while (t--)
#define db(x) cout << #x << "=" << x << "\\n"
#define db2(a, b) cout << #a << ": " << a << " , " << #b << ": " << b << endl;
#define db3(a, b, c)                                                           \\
  cout << #a << ": " << a << " , " << #b << ": " << b << " , " << #c << ": "   \\
       << c << endl;
#define forr(i, n) for (int i = 0; i < n; i++)
#define fr(i, n) for (int i = 1; i <= n; i++)
#define rep(i, j, k) for (int i = j; i < k; i++)
#define rp(i, j, k) for (int i = j; i <= k; i++)
#define nn "\\n"
#define en "\\n"
#define vvi vector<vector<int>>
#define vi vector<int>
#define si set<int>
#define mlsi multiset<int>
#define vc vector<char>
#define vli vector<long long int>
#define vpii vector<pair<int, int>>
#define pii pair<int, int>
#define mii map<int, int>
#define msi map<string, int>
#define mci map<char, int>
#define umii unordered_map<int, int>
#define umsi unordered_map<string, int>
#define umci unordered_map<char, int>
#define mkp make_pair
#define pb push_back
#define eb emplace_back
#define all(x) x.begin(), x.end()
#define sortv(x) sort(x.begin(), x.end())
#define sorta(x, n) sort(x, x + n)
#define sorted(x) is_sorted(x.begin(), x, end())
#define print_all(x)                                                           \\
  for (auto t : x)                                                             \\
    cout << t << " ";                                                          \\
  cout << en;
#define mxe(x) *max_element(all(x))
#define mne(x) *min_element(all(x))
#define go(x) for (auto &[u, v] : x)
#define in(x) cin >> x
#define in2(x, y) cin >> x >> y
#define in3(x, y, z) cin >> x >> y >> z
#define in4(x, y, z, v) cin >> x >> y >> z >> v
#define oo(x) cout << x << endl
#define oo2(x, y) cout << x << " " << y << endl
#define oo3(x, y, z) cout << x << " " << y << " " << z << endl
#define ood(n, x) cout << fixed << setprecision(n) << x << "\\n"
#define sz(x) x.size()
#define ff first
#define ss second
#define ooy cout << "YES\\n"
#define oon cout << "NO\\n"
#define rr return
#define cc continue

using namespace std;

ll mod_pow(ll x, int n) {
  if (n == 0)
    return 1;
  ll res = 1;
  while (n > 0) {
    if (n & 1)
      res = res * x % mod;
    x = x * x % mod;
    n >>= 1;
  }

  return res;
}
vector<ll> allDivisors(ll n) {
  vector<ll> v;
  for (ll i = 1; i <= sqrt(n); i++) {
    if (n % i == 0) {
      if (n / i == i)
        v.pb(i);

      else {
        v.pb(i);
        v.pb(n / i);
      }
    }
  }
  return v;
}
bool isPalin(string s) {
  for (int i = 0; i < s.size() / 2; i++) {
    if (s[i] != s[s.size() - i - 1]) {
      return false;
    }
  }
  return true;
}

vi z_algo(string s) {
  int n = sz(s);
  int l = 0, r = 0;
  vi z(n);
  for (ll i = 1; i < n; i++) {
    if (i > r) {
      l = r = i;
      while (r < n && s[r] == s[r - l]) {
        r++;
      }
      z[i] = r - l;
      r--;
    } else {
      ll index = i - l;
      if (i + z[index] <= r)
        z[i] = z[index];
      else {
        l = i;
        while (r < n && s[r] == s[r - l]) {
          r++;
        }
        z[i] = r - l;
        r--;
      }
    }
  }
  return z;
}

vi z_match(string str, string pat) {
  string total = pat + "$" + str;
  vi z = z_algo(total);
  vi ans;
  forr(i, z.size()) {
    if (z[i] == pat.size()) {
      ans.pb(i - 1 - pat.size());
    }
  }
  return ans;
}

vi kmp(string s) {
  int n = (int)s.length();
  vector<int> pi(n);
  for (int i = 1; i < n; i++) {
    int j = pi[i - 1];
    while (j > 0 && s[i] != s[j])
      j = pi[j - 1];
    if (s[i] == s[j])
      j++;
    pi[i] = j;
  }
  return pi;
}

vi kmp_match(string str, string pat) {
  string total = pat + "$" + str;
  int n = sz(total);
  vi ans = kmp(total);
  vi res;
  for (int i = pat.size() + 1; i < n; i++) {
    if (ans[i] == pat.size()) {
      res.pb(i - 2 * pat.size());
    }
  }
  return res;
}

bool isPrime(ll n) {
  int skip = 0;
  if (n < 2)
    return false;
  else if (n == 2)
    return true;
  ll limit = sqrt(n);
  if (n % 2 == 0)
    return false;
  for (int j = 3; j <= limit; j += 2) {
    if (n % j == 0)
      return false;
  }
  return true;
}

ll kadane(vli &a, int n) {
  ll curr = a[0];
  ll ans = a[0];
  fr(i, n - 1) {
    curr += a[i % n];
    ans = max(ans, curr);
    curr = max(curr, 0LL);
  }
  return ans;
}

bool comp(const pair<ll, ll> &a, const pair<ll, ll> &b) {
  if (a.first == b.first) {
    return a.second < b.second;
  } else {
    return a.second < b.second;
  }
}

ll binpow(ll a, ll b) {
  if (b == 0)
    return 1;
  ll res = binpow(a, b / 2);
  if (b % 2)
    return res * res * a;
  else
    return res * res;
}

/*void sieve(int N)
{
    for (int p=2; p*p<=N; p++)
    {
        if (prime[p] == false)
        {
            for (int i=p*p; i<=N; i += p)
                prime[i] = true;
        }
    }
} */

void read(vli &a, int n) {
  a.resize(n);
  forr(i, n) cin >> a[i];
}

// Stay honest with yourself
// Read the constraints carefully Mridul
// Jay Shree Krishna
// You Can Do this

bool fine = 0;
vli a;

void solve() {

  ll x, y, m;
  in3(x, y, m);
  ll cpy = m;
  vli row(x + 1, 0), col(y + 1, 0);
  vector<pii> bombs;
  vi mrow, mcol;
  ll x1 = -1, y1 = -1;
  while (cpy--) {
    in2(x, y);
    row[x]++;
    col[y]++;
    x1 = max(x1, row[x]);
    y1 = max(y1, col[y]);
    bombs.push_back({x, y});
  }
  x = sz(row);
  y = sz(col);
  forr(i, x) {
    if (row[i] == x1)
      mrow.pb(i);
  }
  forr(i, y) {
    if (col[i] == y1)
      mcol.pb(i);
  }
  ll ans = 0;
  ll count = 0;
  for (int i = 0; i < sz(mrow); i++) {
    forr(j, sz(mcol)) {
      count++;
      if (count > 2 * 300004)
        break;
      ll temp = x1 + y1;
      pii p = {mrow[i], mcol[j]};
      if (find(all(bombs), p) != bombs.end())
        temp--;
      else {
        oo(temp);
        return;
      }
      ans = max(ans, temp);
    }
    if (count > 2 * 300004)
      break;
  }
  oo(ans);
}

int main() {
#ifndef ONLINE_JUDGE
  freopen("input1.txt", "r", stdin);
  freopen("error.txt", "w", stderr);
  freopen("output1.txt", "w", stdout);
#endif
  fast;
  if (fine) {
    start { solve(); }
  } else
    solve();
  return 0;
}