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

#include <bits/stdc++.h>
#define rep(i, start, end) for (long long i = start; i < end; ++i)
#define repreverse(i, start, end) for (long long i = start; i >= end; --i)
#define all(x) (x).begin(), (x).end()
#define len(x) ((long long)(x).size())
#define lcm(a, b) ((a) / __gcd((a), (b)) * (b))
using namespace std;
using ll = long long;
using ld = long double;
using vll = vector<ll>;
using vllvll = vector<vll>;
using pll = pair<ll, ll>;
template <class T> void print1d(T x, ll n = -1) {
  if (n == -1)
    n = x.size();
  rep(i, 0, n) { cout << x[i] << ' '; }
  cout << '\\n';
}
template <class T> void print2d(T x, ll r = -1, ll c = -1) {
  if (r == -1)
    r = x.size();
  if (c == -1)
    c = x[0].size();
  rep(i, 0, r) print1d(x[i], c);
}
template <class T, class U> bool haskey(T mp, U key) {
  return mp.find(key) != mp.end();
}
template <class T, class U> bool isin(T el, U container) {
  return find(all(container), el) != container.end();
}
template <class T> bool chmax(T &a, const T &b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T> bool chmin(T &a, const T &b) {
  if (b < a) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T> ld deg2rad(T deg) { return M_PI * deg / 180.0; }
template <class T> ld rad2deg(T rad) { return 180.0 * rad / M_PI; }
ll intpow(ll a, ll n) {
  ll p = 1;
  while (n) {
    if (n & 1)
      p *= a;
    a *= a;
    n >>= 1;
  }
  return p;
}
const long double pi = M_PI;
const long long big = 1LL << 50;
const long long inf = 1LL << 60;
const long long mod = 1e9 + 7;

int main() {
  ll N, M;
  cin >> N >> M;
  vll H(N + 1);
  rep(i, 1, N + 1) cin >> H[i];
  vector<priority_queue<ll>> pqs(N + 1);

  rep(i, 0, M) {
    ll a, b;
    cin >> a >> b;
    pqs[a].push(H[b]);
    pqs[b].push(H[a]);
  }

  ll ans = 0;
  rep(i, 1, N + 1) {
    ll x = 0;
    if (!pqs[i].empty())
      x = pqs[i].top();
    if (H[i] > x) {
      ans++;
    }
  }
  cout << ans << endl;
}


Error: TLE

Fixed submission:

#include <bits/stdc++.h>
#define rep(i, start, end) for (long long i = start; i < end; ++i)
#define srt(x) sort((x).begin(), (x).end());
#define rsrt(x) sort((x).rbegin(), (x).rend());
#define deb(x) cout << #x << " = " << (x) << " (L" << LINE << ")" << endl;
#define vdeb(x)                                                                \\
  {                                                                            \\
    cout << #x << " = { ";                                                     \\
    rep(i, x.size()) cout << x[i] << ' ';                                      \\
    cout << '}' << " (L" << LINE << ")" << endl;                               \\
  }
using namespace std;
using ll = long long;
using vi = vector<int>;
using vivi = vector<vi>;
using vll = vector<long long>;
using vllvll = vector<vll>;
using vs = vector<string>;
using um = unordered_map<long long, long long>;

int main() {
  ll N, M;
  cin >> N >> M;
  vll H(N);
  rep(i, 0, N) { cin >> H[i]; }
  vll A(M);
  vll B(M);
  vllvll ad(N, vll(N));
  ll a, b;
  queue<ll> q[N];
  rep(i, 0, M) {
    cin >> a >> b;
    --a;
    --b;
    q[a].push(b);
    q[b].push(a);
  }

  bool flg = false;
  ll s = 0;
  rep(i, 0, N) {
    ll std = H[i];
    flg = true;

    while (!q[i].empty()) {
      ll fr = q[i].front();
      q[i].pop();
      if (H[fr] >= std) {
        flg = false;
        continue;
      }
    }
    if (flg) {
      ++s;
    }
  }

  cout << s << endl;
}