Problem p03038 (C++)

Buggy submission (status: Runtime Error):
#include <bits/stdc++.h>
using namespace std;

using lli = long long int;

template <class T> ostream &operator<<(ostream &o, const vector<T> &v) {
  o << "{";
  for (int i = 0; i < (int)v.size(); i++)
    o << (i > 0 ? ", " : "") << v[i];
  o << "}";
  return o;
}

template <class T> ostream &operator<<(ostream &o, const pair<T, T> &p) {
  o << "(" << p.first << ", " << p.second << ")";
  return o;
}

#define rep(i, n) for (lli i = 0; i < (lli)(n); i++)

const lli MOD = 1000000007LL;

lli modpow(lli a, lli n) {
  lli res = 1;

  for (lli ai = a; n; n >>= 1) {
    if (1 & n)
      res = (res * ai) % MOD;
    ai = (ai * ai) % MOD;
  }
  return res;
}

lli inv(lli n) { return modpow(n, MOD - 2); }

lli modperm(lli n, lli k) {
  lli res = 1;
  rep(i, k) { res = (res * (n - i)) % MOD; }
  return res;
}

lli modcomb(lli n, lli k) { return (modperm(n, k) * inv(modperm(k, k))) % MOD; }

lli posmod(lli n) {
  lli res = n;
  res %= MOD;
  if (res < 0)
    res += MOD;
  return res;
}
lli n, m;
vector<lli> A, D;
vector<pair<lli, lli>> cb;
lli res = 0;

int main(void) {
  cin >> n >> m;
  rep(i, n) {
    lli a;
    cin >> a;
    A.push_back(a);
  }
  rep(j, m) {
    lli b, c;
    cin >> b >> c;
    cb.push_back(make_pair(c, b));
  }
  sort(cb.begin(), cb.end(), greater<pair<lli, lli>>());
  for (auto i : cb) {
    while (i.second-- && D.size() < n) {
      D.push_back(i.first);
    }
  }
  rep(i, n) { A.push_back(D[i]); }
  sort(A.begin(), A.end(), greater<lli>());
  rep(i, n) { res += A[i]; }
  cout << res << endl;
  return 0;
}


Fixed submission:
#include <bits/stdc++.h>
using namespace std;

using lli = long long int;

template <class T> ostream &operator<<(ostream &o, const vector<T> &v) {
  o << "{";
  for (int i = 0; i < (int)v.size(); i++)
    o << (i > 0 ? ", " : "") << v[i];
  o << "}";
  return o;
}

template <class T> ostream &operator<<(ostream &o, const pair<T, T> &p) {
  o << "(" << p.first << ", " << p.second << ")";
  return o;
}

#define rep(i, n) for (lli i = 0; i < (lli)(n); i++)

const lli MOD = 1000000007LL;

lli modpow(lli a, lli n) {
  lli res = 1;

  for (lli ai = a; n; n >>= 1) {
    if (1 & n)
      res = (res * ai) % MOD;
    ai = (ai * ai) % MOD;
  }
  return res;
}

lli inv(lli n) { return modpow(n, MOD - 2); }

lli modperm(lli n, lli k) {
  lli res = 1;
  rep(i, k) { res = (res * (n - i)) % MOD; }
  return res;
}

lli modcomb(lli n, lli k) { return (modperm(n, k) * inv(modperm(k, k))) % MOD; }

lli posmod(lli n) {
  lli res = n;
  res %= MOD;
  if (res < 0)
    res += MOD;
  return res;
}
lli n, m;
vector<lli> A, D;
vector<pair<lli, lli>> cb;
lli res = 0;

int main(void) {
  cin >> n >> m;
  rep(i, n) {
    lli a;
    cin >> a;
    A.push_back(a);
  }
  rep(j, m) {
    lli b, c;
    cin >> b >> c;
    cb.push_back(make_pair(c, b));
  }
  sort(cb.begin(), cb.end(), greater<pair<lli, lli>>());
  for (auto i : cb) {
    while (i.second-- && D.size() < n) {
      D.push_back(i.first);
    }
  }
  while (D.size() != n)
    D.push_back(-LLONG_MAX);
  rep(i, n) { A.push_back(D[i]); }
  sort(A.begin(), A.end(), greater<lli>());
  rep(i, n) { res += A[i]; }
  cout << res << endl;
  return 0;
}