Problem p03411 (C++)

Buggy submission (status: Time Limit Exceeded):
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
typedef long long ll;
using namespace __gnu_pbds;
typedef tree<int, null_type, less<int>, rb_tree_tag,
             tree_order_statistics_node_update>
    pbds;
#pragma GCC target("avx2")
#pragma GCC optimization("O3")
#pragma GCC optimization("unroll-loops")
#define ios                                                                    \
  ios_base::sync_with_stdio(0);                                                \
  cin.tie(0);                                                                  \
  cout.tie(0)
#define so sizeof
#define pb push_back
#define cl clear();
#define vl vector<ll>
#define sz size()
#define len length()
#define emp empty()
#define el                                                                     \
  endl;                                                                        \
  cout.flush()
#define be begin()
#define fi first
#define se second
#define br break
#define en end()
#define ro return 0
#define eb emplace_back
#define con continue
#define ms(x) memset(x, 0, so x)
#define all(x) (x).be, (x).en
#define acc(x) accumulate((x).be, (x).en, 0ll)
#define forn(i, a, b) for (ll i = a; i <= b; ++i)
#define rng_58                                                                 \
  mt19937 rng(chrono::steady_clock::now().time_since_epoch().count())
#define vll vector<pair<ll, ll>>
#define pll pair<ll, ll>
#define plll pair<ll, pair<ll, ll>>
#define plvl pair<pair<ll, ll>, ll>
#define mp make_pair
#define trace3(a, b, c)                                                        \
  cerr << "a is " << a << " b is " << b << " c is " << c << el;
#define trace4(a, b, c, d)                                                     \
  cerr << "a is " << a << " b is " << b << " c is " << c << " d is " << d << el;
#define trace5(a, b, c, d, e)                                                  \
  cerr << "a is " << a << " b is " << b << " c is " << c << " d is " << d      \
       << " e is " << e << el;
#define trace6(a, b, c, d, e, f)                                               \
  cerr << "a is " << a << " b is " << b << " c is " << c << " d is " << d      \
       << " e is " << e << " f is " << f << el;

int main() {
  ios;
  ll n;
  cin >> n;
  vector<plvl> v;
  forn(i, 1, 2 * n) {
    ll x, y;
    cin >> x >> y;
    if (i <= n) {
      v.pb({{x, y}, 0});
    } else {
      v.pb({{x, y}, 1});
    }
  }
  sort(all(v));
  multiset<ll> s;
  ll ans = 0;
  forn(i, 1, 2 * n) {
    if (v[i - 1].se == 0) {
      s.insert(v[i - 1].fi.se);
    } else {
      ll foo = *s.begin();
      ll y = v[i - 1].fi.se;
      if (foo >= y)
        con;
      auto it = s.lower_bound(y);
      if (it == s.begin()) {
        ll res = *it;
        if (res == y) {
          con;
        } else if (res < y) {
          ++ans;
          s.erase(it);
        }
      } else {
        --it;
        s.erase(it);
        ++ans;
      }
    }
  }
  cout << ans << el;
  ro;
}


Fixed submission:
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
typedef long long ll;
using namespace __gnu_pbds;
typedef tree<int, null_type, less<int>, rb_tree_tag,
             tree_order_statistics_node_update>
    pbds;
#pragma GCC target("avx2")
#pragma GCC optimization("O3")
#pragma GCC optimization("unroll-loops")
#define ios                                                                    \
  ios_base::sync_with_stdio(0);                                                \
  cin.tie(0);                                                                  \
  cout.tie(0)
#define so sizeof
#define pb push_back
#define cl clear();
#define vl vector<ll>
#define sz size()
#define len length()
#define emp empty()
#define el                                                                     \
  endl;                                                                        \
  cout.flush()
#define be begin()
#define fi first
#define se second
#define br break
#define en end()
#define ro return 0
#define eb emplace_back
#define con continue
#define ms(x) memset(x, 0, so x)
#define all(x) (x).be, (x).en
#define acc(x) accumulate((x).be, (x).en, 0ll)
#define forn(i, a, b) for (ll i = a; i <= b; ++i)
#define rng_58                                                                 \
  mt19937 rng(chrono::steady_clock::now().time_since_epoch().count())
#define vll vector<pair<ll, ll>>
#define pll pair<ll, ll>
#define plll pair<ll, pair<ll, ll>>
#define plvl pair<pair<ll, ll>, ll>
#define mp make_pair
#define trace3(a, b, c)                                                        \
  cerr << "a is " << a << " b is " << b << " c is " << c << el;
#define trace4(a, b, c, d)                                                     \
  cerr << "a is " << a << " b is " << b << " c is " << c << " d is " << d << el;
#define trace5(a, b, c, d, e)                                                  \
  cerr << "a is " << a << " b is " << b << " c is " << c << " d is " << d      \
       << " e is " << e << el;
#define trace6(a, b, c, d, e, f)                                               \
  cerr << "a is " << a << " b is " << b << " c is " << c << " d is " << d      \
       << " e is " << e << " f is " << f << el;

int main() {
  ios;
  ll n;
  cin >> n;
  vector<plvl> v;
  forn(i, 1, 2 * n) {
    ll x, y;
    cin >> x >> y;
    if (i <= n) {
      v.pb({{x, y}, 0});
    } else {
      v.pb({{x, y}, 1});
    }
  }
  sort(all(v));
  multiset<ll> s;
  ll ans = 0;
  forn(i, 1, 2 * n) {
    if (v[i - 1].se == 0) {
      s.insert(v[i - 1].fi.se);
    } else {
      if (ll(s.sz) == 0) {
        con;
      }
      ll foo = *s.begin();
      ll y = v[i - 1].fi.se;
      if (foo >= y)
        con;
      auto it = s.lower_bound(y);
      if (it == s.begin()) {
        ll res = *it;
        if (res == y) {
          con;
        } else if (res < y) {
          ++ans;
          s.erase(it);
        }
      } else {
        --it;
        s.erase(it);
        ++ans;
      }
    }
  }
  cout << ans << el;
  ro;
}