Problem p02788 (C++)

Buggy submission (status: Runtime Error):
#pragma comment(linker, "/STACK:526000000")
#define _CRT_SECURE_NO_WARNINGS
#include "bits/stdc++.h"

using namespace std;
typedef string::const_iterator State;
#define eps 1e-11L
#define MAX_MOD 1000000007LL
#define GYAKU 500000004LL

#define MOD 998244353LL
#define seg_size 262144
#define pb push_back
#define mp make_pair
typedef long long ll;
#define REP(a, b) for (long long(a) = 0; (a) < (b); ++(a))
#define ALL(x) (x).begin(), (x).end()
unsigned long xor128() {
  static unsigned long x = 123456789, y = 362436069, z = 521288629,
                       w = 88675123;
  unsigned long t = (x ^ (x << 11));
  x = y;
  y = z;
  z = w;
  return (w = (w ^ (w >> 19)) ^ (t ^ (t >> 8)));
}
void init() {
  iostream::sync_with_stdio(false);
  cout << fixed << setprecision(100);
}
#define int ll
int go[300000];
int imos[300000];
void solve() {
  int n, d, a;
  cin >> n >> d >> a;
  vector<pair<int, int>> inputs;
  REP(i, n) {
    int a, b;
    cin >> a >> b;
    inputs.push_back(mp(a, b));
  }
  sort(ALL(inputs));
  inputs.push_back(mp(3e9, 0));
  int ans = 0;
  int next_go = 0;
  REP(i, n) {
    while (inputs[next_go + 1].first - inputs[i].first <= 2 * d) {
      next_go++;
    }
    go[i] = next_go;
  }
  int now_bomb = 0;
  for (int i = 0; i < n; ++i) {
    now_bomb += imos[i];
    if (now_bomb * a < inputs[i].second) {
      int hoge = inputs[i].second - now_bomb * a;
      int cnt = (hoge + a - 1LL) / a;
      now_bomb += cnt;
      ans += cnt;
      imos[go[i] + 1] -= cnt;
    }
  }
  cout << ans << endl;
}
#undef int
int main() {
  init();
  solve();
}

Fixed submission:
#pragma comment(linker, "/STACK:526000000")
#define _CRT_SECURE_NO_WARNINGS
#include "bits/stdc++.h"

using namespace std;
typedef string::const_iterator State;
#define eps 1e-11L
#define MAX_MOD 1000000007LL
#define GYAKU 500000004LL

#define MOD 998244353LL
#define seg_size 262144
#define pb push_back
#define mp make_pair
typedef long long ll;
#define REP(a, b) for (long long(a) = 0; (a) < (b); ++(a))
#define ALL(x) (x).begin(), (x).end()
unsigned long xor128() {
  static unsigned long x = 123456789, y = 362436069, z = 521288629,
                       w = 88675123;
  unsigned long t = (x ^ (x << 11));
  x = y;
  y = z;
  z = w;
  return (w = (w ^ (w >> 19)) ^ (t ^ (t >> 8)));
}
void init() {
  iostream::sync_with_stdio(false);
  cout << fixed << setprecision(100);
}
#define int ll
int go[300000];
int imos[300000];
void solve() {
  int n, d, a;
  cin >> n >> d >> a;
  vector<pair<int, int>> inputs;
  REP(i, n) {
    int a, b;
    cin >> a >> b;
    inputs.push_back(mp(a, b));
  }
  sort(ALL(inputs));
  inputs.push_back(mp(1e12, 0));
  int ans = 0;
  int next_go = 0;
  REP(i, n) {
    while (inputs[next_go + 1].first - inputs[i].first <= 2 * d) {
      next_go++;
    }
    go[i] = next_go;
  }
  int now_bomb = 0;
  for (int i = 0; i < n; ++i) {
    now_bomb += imos[i];
    if (now_bomb * a < inputs[i].second) {
      int hoge = inputs[i].second - now_bomb * a;
      int cnt = (hoge + a - 1LL) / a;
      now_bomb += cnt;
      ans += cnt;
      imos[go[i] + 1] -= cnt;
    }
  }
  cout << ans << endl;
}
#undef int
int main() {
  init();
  solve();
}