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

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef vector<int> vi;
typedef vector<ll> vll;
typedef vector<vi> vvi;
typedef vector<string> vs;
typedef pair<int, int> pii;

#define sz(a) int((a).size())
#define pb push_back
#define eb emplace_back
#define fi first
#define se second
#define all(c) (c).begin(), (c).end()
#define rall(c) (c).rbegin(), (c).rend()
#define ini(a, i) memset(a, i, sizeof(a))
#define inin(a, n, i) memset(a, i, sizeof(a[0]) * (n))
#define contains(c, i) ((c).find(i) != (c).end())
#define present(i, c) (find(all(c), i) != (c).end())

#define trav(x, c) for (auto &x : c)
#define rep(i, n) for (int i = 0; i < n; i++)
#define repa(i, b, e)                                                          \\
  for (int i = (b) - ((b) > (e)); i != (e) - ((b) > (e));                      \\
       i += 1 - 2 * ((b) > (e)))

template <class T> bool chkmax(T &x, T y) {
  return x < y ? x = y, true : false;
}
template <class T> bool chkmin(T &x, T y) {
  return x > y ? x = y, true : false;
}
template <class A, class B> A cvt(B x) {
  stringstream s;
  s << x;
  A r;
  s >> r;
  return r;
}

void read() {}
void print() {}
template <class T, class... Args> void read(T &a, Args &...args) {
  cin >> a;
  read(args...);
}
template <class T, class... Args> void print(T a, Args... args) {
  cout << a << ' ';
  print(args...);
}
template <class... Args> void println(Args... args) {
  print(args...);
  cout << '\\n';
}

#define debug(args...)                                                         \\
  {                                                                            \\
    string s_(#args);                                                          \\
    replace(all(s_), ',', ' ');                                                \\
    stringstream ss_(s_);                                                      \\
    istream_iterator<string> it_(ss_);                                         \\
    cerr_(it_, args);                                                          \\
  }
void cerr_(istream_iterator<string> it) { (void)it; }
template <class T, class... Args>
void cerr_(istream_iterator<string> it, T a, Args... args) {
  cerr << *it << " = " << a << endl;
  cerr_(++it, args...);
}

template <class T, class S>
ostream &operator<<(ostream &os, const pair<T, S> &p) {
  os << "(" << p.first << ", " << p.second << ")";
  return os;
}
template <class T> ostream &operator<<(ostream &os, const vector<T> &v) {
  os << '{';
  string sep;
  for (const auto &x : v)
    os << sep << x, sep = ", ";
  return os << '}';
}
template <class T> ostream &operator<<(ostream &os, const set<T> &s) {
  os << '{';
  string sep;
  for (const auto &x : s)
    os << sep << x, sep = ", ";
  return os << '}';
}
template <class T, class S>
ostream &operator<<(ostream &os, const map<T, S> &m) {
  os << '{';
  string sep;
  for (const auto &x : m)
    os << sep << x, sep = ", ";
  return os << '}';
}
template <class T, size_t size>
ostream &operator<<(ostream &os, const array<T, size> &arr) {
  os << '{';
  string sep;
  for (const auto &x : arr)
    os << sep << x, sep = ", ";
  return os << '}';
}

const int INF = 0x3F3F3F3F;
const int MAXN = (int)3e5 + 1;
const int MOD = (int)1e9 + 7;

//=========================

int h, w, m;
vi hm, wm;

int cnt[MAXN];

int check(vi &a, vi &b) {
  map<pii, bool> mp;
  rep(i, m) mp[{a[i], b[i]}] = true;

  ini(cnt, 0);
  rep(i, m) cnt[a[i]]++;
  set<pii, greater<pii>> s;
  rep(i, m) s.insert({cnt[a[i]], a[i]});

  ini(cnt, 0);
  rep(i, m) cnt[b[i]]++;
  set<pii, greater<pii>> t;
  rep(i, m) t.insert({cnt[b[i]], b[i]});

  int mxa = s.begin()->fi, mxb = 0;

  for (auto [ca, xa] : s) {
    if (ca < mxa)
      break;
    for (auto [cb, xb] : t) {
      if (mp[{xa, xb}]) {
        cb--;
        chkmax(mxb, cb);
      } else {
        chkmax(mxb, cb);
        break;
      }
    }
  }

  return mxa + mxb;
}

void run_test() {
  read(h, w, m);
  hm = vi(m);
  wm = vi(m);
  rep(i, m) {
    int hi, wi;
    read(hi, wi);
    hm[i] = hi;
    wm[i] = wi;
  }

  int mxa = check(hm, wm);
  int mxb = check(wm, hm);
  println(max(mxa, mxb));
}

//=========================

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  // int t_ = 1, t__; cin >> t__; while(t_ <= t__) { cout << "Case #" << t_++ <<
  // ": "; run_test(); }
  //  int t_; cin >> t_; while(t_--) run_test();
  run_test();
  return 0;
}


Error: TLE

Fixed submission:

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef vector<int> vi;
typedef vector<ll> vll;
typedef vector<vi> vvi;
typedef vector<string> vs;
typedef pair<int, int> pii;

#define sz(a) int((a).size())
#define pb push_back
#define eb emplace_back
#define fi first
#define se second
#define all(c) (c).begin(), (c).end()
#define rall(c) (c).rbegin(), (c).rend()
#define ini(a, i) memset(a, i, sizeof(a))
#define inin(a, n, i) memset(a, i, sizeof(a[0]) * (n))
#define contains(c, i) ((c).find(i) != (c).end())
#define present(i, c) (find(all(c), i) != (c).end())

#define trav(x, c) for (auto &x : c)
#define rep(i, n) for (int i = 0; i < n; i++)
#define repa(i, b, e)                                                          \\
  for (int i = (b) - ((b) > (e)); i != (e) - ((b) > (e));                      \\
       i += 1 - 2 * ((b) > (e)))

template <class T> bool chkmax(T &x, T y) {
  return x < y ? x = y, true : false;
}
template <class T> bool chkmin(T &x, T y) {
  return x > y ? x = y, true : false;
}
template <class A, class B> A cvt(B x) {
  stringstream s;
  s << x;
  A r;
  s >> r;
  return r;
}

void read() {}
void print() {}
template <class T, class... Args> void read(T &a, Args &...args) {
  cin >> a;
  read(args...);
}
template <class T, class... Args> void print(T a, Args... args) {
  cout << a << ' ';
  print(args...);
}
template <class... Args> void println(Args... args) {
  print(args...);
  cout << '\\n';
}

#define debug(args...)                                                         \\
  {                                                                            \\
    string s_(#args);                                                          \\
    replace(all(s_), ',', ' ');                                                \\
    stringstream ss_(s_);                                                      \\
    istream_iterator<string> it_(ss_);                                         \\
    cerr_(it_, args);                                                          \\
  }
void cerr_(istream_iterator<string> it) { (void)it; }
template <class T, class... Args>
void cerr_(istream_iterator<string> it, T a, Args... args) {
  cerr << *it << " = " << a << endl;
  cerr_(++it, args...);
}

template <class T, class S>
ostream &operator<<(ostream &os, const pair<T, S> &p) {
  os << "(" << p.first << ", " << p.second << ")";
  return os;
}
template <class T> ostream &operator<<(ostream &os, const vector<T> &v) {
  os << '{';
  string sep;
  for (const auto &x : v)
    os << sep << x, sep = ", ";
  return os << '}';
}
template <class T> ostream &operator<<(ostream &os, const set<T> &s) {
  os << '{';
  string sep;
  for (const auto &x : s)
    os << sep << x, sep = ", ";
  return os << '}';
}
template <class T, class S>
ostream &operator<<(ostream &os, const map<T, S> &m) {
  os << '{';
  string sep;
  for (const auto &x : m)
    os << sep << x, sep = ", ";
  return os << '}';
}
template <class T, size_t size>
ostream &operator<<(ostream &os, const array<T, size> &arr) {
  os << '{';
  string sep;
  for (const auto &x : arr)
    os << sep << x, sep = ", ";
  return os << '}';
}

const int INF = 0x3F3F3F3F;
const int MAXN = (int)3e5 + 1;
const int MOD = (int)1e9 + 7;

//=========================

int h, w, m;
vi hm, wm;

int cnt[MAXN];

int check(vi &a, vi &b) {
  ini(cnt, 0);
  rep(i, m) cnt[a[i]]++;
  set<pii, greater<pii>> s;
  rep(i, m) s.insert({cnt[a[i]], a[i]});
  int mxa = s.begin()->fi, mxb = 0;
  for (auto [c, v] : s)
    if (c == mxa) {
      ini(cnt, 0);
      rep(i, m) if (a[i] != v) cnt[b[i]]++;
      set<pii, greater<pii>> t;
      rep(i, m) if (a[i] != v) t.insert({cnt[b[i]], b[i]});
      mxb = t.begin()->first;
    }
  return mxa + mxb;
}

void run_test() {
  read(h, w, m);
  hm = vi(m);
  wm = vi(m);
  rep(i, m) {
    int hi, wi;
    read(hi, wi);
    hm[i] = hi;
    wm[i] = wi;
  }

  int mxa = check(hm, wm);
  int mxb = check(wm, hm);
  println(max(mxa, mxb));
}

//=========================

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  // int t_ = 1, t__; cin >> t__; while(t_ <= t__) { cout << "Case #" << t_++ <<
  // ": "; run_test(); }
  //  int t_; cin >> t_; while(t_--) run_test();
  run_test();
  return 0;
}