Problem p00730 (C++)

Buggy submission (status: Runtime Error):
#include "bits/stdc++.h"

#define REP(i, n) for (ll i = 0; i < n; ++i)
#define RREP(i, n) for (ll i = n - 1; i >= 0; --i)
#define FOR(i, m, n) for (ll i = m; i < n; ++i)
#define RFOR(i, m, n) for (ll i = n - 1; i >= m; --i)
#define ALL(v) (v).begin(), (v).end()
#define PB(a) push_back(a)
#define UNIQUE(v) v.erase(unique(ALL(v)), v.end());
#define DUMP(v)                                                                \
  REP(aa, (v).size()) {                                                        \
    cout << v[a];                                                              \
    if (a != v.size() - 1)                                                     \
      cout << " ";                                                             \
    else                                                                       \
      cout << endl;                                                            \
  }
#define INF 1000000001ll
#define MOD 1000000007ll
#define EPS 1e-9

const int dx[8] = {1, 1, 0, -1, -1, -1, 0, 1};
const int dy[8] = {0, 1, 1, 1, 0, -1, -1, -1};

using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<vi> vvi;
typedef vector<vl> vvl;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
ll max(ll a, int b) { return max(a, ll(b)); }
ll max(int a, ll b) { return max(ll(a), b); }
ll min(ll a, int b) { return min(a, ll(b)); }
ll min(int a, ll b) { return min(ll(a), b); }
///(?´????????`)(?´????????`)(?´????????`)(?´????????`)(?´????????`)(?´????????`)///
bool comp(pair<ll, pll> a, pair<ll, pll> b) {
  if (a.first != b.first)
    return a.first < b.first;
  return a.second.first * a.second.second < b.second.first * b.second.second;
}
bool comp2(pair<ll, pll> a, pair<ll, pll> b) {
  return a.second.first * a.second.second < b.second.first * b.second.second;
}
int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  while (1) {
    int n, w, d;
    cin >> n >> w >> d;
    if (!w)
      break;
    vector<pair<ll, pll>> v;
    v.push_back({0, {w, d}});
    REP(i, n) {
      int p, s;
      cin >> p >> s;
      auto a = v[p - 1];
      v.erase(v.begin() + p - 1);
      int W = a.second.first, D = a.second.second;
      s %= 2 * (W + D);
      if (s < W) {
        v.push_back({i + 1, {s, D}});
        v.push_back({i + 1, {W - s, D}});
      } else if (s < W + D) {
        v.push_back({i + 1, {W, s - D}});
        v.push_back({i + 1, {W, W + D - s}});
      } else if (s < 2 * W + D) {
        v.push_back({i + 1, {s - W - D, D}});
        v.push_back({i + 1, {2 * W + D - s, D}});
      } else {
        v.push_back({i + 1, {W, s - 2 * W - D}});
        v.push_back({i + 1, {W, 2 * W + 2 * D - s}});
      }
      sort(ALL(v), comp);
    }
    sort(ALL(v), comp2);
    REP(i, v.size()) {
      cout << v[i].second.first * v[i].second.second;
      if (i != v.size() - 1)
        cout << " ";
      else
        cout << endl;
    }
  }

  return 0;
}

Fixed submission:
#include "bits/stdc++.h"

#define REP(i, n) for (ll i = 0; i < n; ++i)
#define RREP(i, n) for (ll i = n - 1; i >= 0; --i)
#define FOR(i, m, n) for (ll i = m; i < n; ++i)
#define RFOR(i, m, n) for (ll i = n - 1; i >= m; --i)
#define ALL(v) (v).begin(), (v).end()
#define PB(a) push_back(a)
#define UNIQUE(v) v.erase(unique(ALL(v)), v.end());
#define DUMP(v)                                                                \
  REP(aa, (v).size()) {                                                        \
    cout << v[a];                                                              \
    if (a != v.size() - 1)                                                     \
      cout << " ";                                                             \
    else                                                                       \
      cout << endl;                                                            \
  }
#define INF 1000000001ll
#define MOD 1000000007ll
#define EPS 1e-9

const int dx[8] = {1, 1, 0, -1, -1, -1, 0, 1};
const int dy[8] = {0, 1, 1, 1, 0, -1, -1, -1};

using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<vi> vvi;
typedef vector<vl> vvl;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
ll max(ll a, int b) { return max(a, ll(b)); }
ll max(int a, ll b) { return max(ll(a), b); }
ll min(ll a, int b) { return min(a, ll(b)); }
ll min(int a, ll b) { return min(ll(a), b); }
///(?´????????`)(?´????????`)(?´????????`)(?´????????`)(?´????????`)(?´????????`)///
bool comp(pair<ll, pll> a, pair<ll, pll> b) {
  if (a.first != b.first)
    return a.first < b.first;
  return a.second.first * a.second.second < b.second.first * b.second.second;
}
bool comp2(pair<ll, pll> a, pair<ll, pll> b) {
  return a.second.first * a.second.second < b.second.first * b.second.second;
}
int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  while (1) {
    int n, w, d;
    cin >> n >> w >> d;
    if (!w)
      break;
    vector<pair<ll, pll>> v;
    v.push_back({0, {w, d}});
    REP(i, n) {
      int p, s;
      cin >> p >> s;
      auto a = v[p - 1];
      v.erase(v.begin() + p - 1);
      int W = a.second.first, D = a.second.second;
      s %= 2 * (W + D);
      if (s < W) {
        v.push_back({i + 1, {s, D}});
        v.push_back({i + 1, {W - s, D}});
      } else if (s < W + D) {
        v.push_back({i + 1, {W, s - W}});
        v.push_back({i + 1, {W, W + D - s}});
      } else if (s < 2 * W + D) {
        v.push_back({i + 1, {s - W - D, D}});
        v.push_back({i + 1, {2 * W + D - s, D}});
      } else {
        v.push_back({i + 1, {W, s - 2 * W - D}});
        v.push_back({i + 1, {W, 2 * W + 2 * D - s}});
      }
      sort(ALL(v), comp);
    }
    sort(ALL(v), comp2);
    REP(i, v.size()) {
      cout << v[i].second.first * v[i].second.second;
      if (i != v.size() - 1)
        cout << " ";
      else
        cout << endl;
    }
  }

  return 0;
}