Problem p02788 (C++)

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

#define LL long long
typedef pair<int, int> pii;

template <typename T> inline void read(T &x) {
  static char _c;
  static bool _f;

  x = 0;
  _f = 0;
  _c = getchar();

  while (_c < '0' || '9' < _c) {
    if (_c == '-')
      _f = true;
    _c = getchar();
  }
  while ('0' <= _c && _c <= '9') {
    x = (x << 1) + (x << 3) + (_c & 15);
    _c = getchar();
  }
  if (_f)
    x = -x;
}

template <typename T> inline void Min(T &x, T y) {
  if (y < x)
    x = y;
}
template <typename T> inline void Max(T &x, T y) {
  if (x < y)
    x = y;
}

#define lowbit(x) ((x) & -(x))
#define lson l, mid, id << 1
#define rson mid + 1, r, id << 1 | 1
#define ls id << 1
#define rs id << 1 | 1
#define MID(l, r) ((l) + (((r) - (l)) >> 1))
#define fi first
#define se second
#define mk make_pair
#define pb push_back

const int INF = 0x3f3f3f3f;
const int MOD = (int)1e9 + 7;
// const int MOD = (int) 998244353;
const int maxn = (int)1e4 + 20;
const int maxm = (int)1e6 + 20;
const double pi = (double)acos(-1.0);
const double eps = (double)1e-8;

inline int sig(double x) { return x < -eps ? -1 : eps < x; }
LL fp(LL a, LL n, LL m = MOD) {
  LL res = 1;
  for (; n; n >>= 1, a = a * a % m)
    if (n & 1)
      res = res * a % m;
  return res;
}

int n;
pair<LL, LL> p[maxn];
queue<pair<LL, LL>> Q;
LL d, a;

void work() {
  cin >> n;
  cin >> d >> a;
  for (int i = 0; i < n; i++)
    cin >> p[i].fi >> p[i].se;

  sort(p, p + n);

  LL now = 0;
  LL ans = 0;
  for (int i = 0; i < n; i++) {
    LL x = p[i].fi, h = p[i].se;
    while (Q.size() && Q.front().fi < x) {
      now -= Q.front().se;
      Q.pop();
    }

    if (now >= h)
      continue;

    LL tmp = h - now;
    LL t = (tmp + a - 1) / a;
    now += a * t;
    ans += t;
    Q.push(mk(x + d * 2, a * t));
  }
  cout << ans << endl;
}

int main() {
#ifdef yukihana0416
  freopen("in.txt", "r", stdin);
// freopen("out.txt", "w", stdout);
#endif // yukihana0416
       //    get_prime();
  int tc = 1;
  //    read(tc);
  for (int ca = 1; ca <= tc; ca++) {
    //        printf("Case #%d: ", ca);
    work();
  }
  return 0;
}


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

#define LL long long
typedef pair<int, int> pii;

template <typename T> inline void read(T &x) {
  static char _c;
  static bool _f;

  x = 0;
  _f = 0;
  _c = getchar();

  while (_c < '0' || '9' < _c) {
    if (_c == '-')
      _f = true;
    _c = getchar();
  }
  while ('0' <= _c && _c <= '9') {
    x = (x << 1) + (x << 3) + (_c & 15);
    _c = getchar();
  }
  if (_f)
    x = -x;
}

template <typename T> inline void Min(T &x, T y) {
  if (y < x)
    x = y;
}
template <typename T> inline void Max(T &x, T y) {
  if (x < y)
    x = y;
}

#define lowbit(x) ((x) & -(x))
#define lson l, mid, id << 1
#define rson mid + 1, r, id << 1 | 1
#define ls id << 1
#define rs id << 1 | 1
#define MID(l, r) ((l) + (((r) - (l)) >> 1))
#define fi first
#define se second
#define mk make_pair
#define pb push_back

const int INF = 0x3f3f3f3f;
const int MOD = (int)1e9 + 7;
// const int MOD = (int) 998244353;
const int maxn = (int)2e5 + 20;
const int maxm = (int)1e6 + 20;
const double pi = (double)acos(-1.0);
const double eps = (double)1e-8;

inline int sig(double x) { return x < -eps ? -1 : eps < x; }
LL fp(LL a, LL n, LL m = MOD) {
  LL res = 1;
  for (; n; n >>= 1, a = a * a % m)
    if (n & 1)
      res = res * a % m;
  return res;
}

int n;
pair<LL, LL> p[maxn];
queue<pair<LL, LL>> Q;
LL d, a;

void work() {
  cin >> n;
  cin >> d >> a;
  for (int i = 0; i < n; i++)
    cin >> p[i].fi >> p[i].se;

  sort(p, p + n);

  LL now = 0;
  LL ans = 0;
  for (int i = 0; i < n; i++) {
    LL x = p[i].fi, h = p[i].se;
    while (Q.size() && Q.front().fi < x) {
      now -= Q.front().se;
      Q.pop();
    }

    if (now >= h)
      continue;

    LL tmp = h - now;
    LL t = (tmp + a - 1) / a;
    now += a * t;
    ans += t;
    Q.push(mk(x + d * 2, a * t));
  }
  cout << ans << endl;
}

int main() {
#ifdef yukihana0416
  freopen("in.txt", "r", stdin);
// freopen("out.txt", "w", stdout);
#endif // yukihana0416
       //    get_prime();
  int tc = 1;
  //    read(tc);
  for (int ca = 1; ca <= tc; ca++) {
    //        printf("Case #%d: ", ca);
    work();
  }
  return 0;
}