Problem p03783 (C++)

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

#define For(i, l, r)                                                           \
  for (register int i = (l), i##end = (int)(r); i <= i##end; ++i)
#define Fordown(i, r, l)                                                       \
  for (register int i = (r), i##end = (int)(l); i >= i##end; --i)
#define Rep(i, r) for (register int i = (0), i##end = (int)(r); i < i##end; ++i)
#define Set(a, v) memset(a, v, sizeof(a))
#define Cpy(a, b) memcpy(a, b, sizeof(a))
#define debug(x) cout << #x << ": " << (x) << endl

using namespace std;

typedef long long ll;

template <typename T> inline bool chkmin(T &a, T b) {
  return b < a ? a = b, 1 : 0;
}
template <typename T> inline bool chkmax(T &a, T b) {
  return b > a ? a = b, 1 : 0;
}

inline int read() {
  int x(0), sgn(1);
  char ch(getchar());
  for (; !isdigit(ch); ch = getchar())
    if (ch == '-')
      sgn = -1;
  for (; isdigit(ch); ch = getchar())
    x = (x * 10) + (ch ^ 48);
  return x * sgn;
}

void File() {
#ifdef zjp_shadow
  freopen("E.in", "r", stdin);
  freopen("E.out", "w", stdout);
#endif
}

const int N = 410;

int n, l[N], r[N], len[N];

ll tl, tr, ans;

priority_queue<ll> L;
priority_queue<ll, vector<ll>, greater<ll>> R;

int main() {

  File();

  For(i, 1, n = read()) l[i] = read(), r[i] = read(), len[i] = r[i] - l[i];

  L.push(r[1]);
  R.push(r[1]);
  For(i, 2, n) {
    tl -= len[i - 1];
    tr += len[i];
    ll lp = L.top() + tl, rp = R.top() + tr;
    if (lp <= r[i] && r[i] <= rp)
      L.push(r[i] - tl), R.push(r[i] - tr);
    else if (r[i] >= lp) {
      ans += r[i] - rp;
      R.pop();
      L.push(rp - tl);
      R.push(r[i] - tr);
      R.push(r[i] - tr);
    } else {
      ans += lp - r[i];
      L.pop();
      R.push(lp - tr);
      L.push(r[i] - tl);
      L.push(r[i] - tl);
    }
  }
  printf("%lld\n", ans);

  return 0;
}

Fixed submission:
#include <bits/stdc++.h>

#define For(i, l, r)                                                           \
  for (register int i = (l), i##end = (int)(r); i <= i##end; ++i)
#define Fordown(i, r, l)                                                       \
  for (register int i = (r), i##end = (int)(l); i >= i##end; --i)
#define Rep(i, r) for (register int i = (0), i##end = (int)(r); i < i##end; ++i)
#define Set(a, v) memset(a, v, sizeof(a))
#define Cpy(a, b) memcpy(a, b, sizeof(a))
#define debug(x) cout << #x << ": " << (x) << endl

using namespace std;

typedef long long ll;

template <typename T> inline bool chkmin(T &a, T b) {
  return b < a ? a = b, 1 : 0;
}
template <typename T> inline bool chkmax(T &a, T b) {
  return b > a ? a = b, 1 : 0;
}

inline int read() {
  int x(0), sgn(1);
  char ch(getchar());
  for (; !isdigit(ch); ch = getchar())
    if (ch == '-')
      sgn = -1;
  for (; isdigit(ch); ch = getchar())
    x = (x * 10) + (ch ^ 48);
  return x * sgn;
}

void File() {
#ifdef zjp_shadow
  freopen("E.in", "r", stdin);
  freopen("E.out", "w", stdout);
#endif
}

const int N = 1e5 + 1e3;

int n, l[N], r[N], len[N];

ll tl, tr, ans;

priority_queue<ll> L;
priority_queue<ll, vector<ll>, greater<ll>> R;

int main() {

  File();

  For(i, 1, n = read()) l[i] = read(), r[i] = read(), len[i] = r[i] - l[i];

  L.push(r[1]);
  R.push(r[1]);
  For(i, 2, n) {
    tl -= len[i - 1];
    tr += len[i];
    ll lp = L.top() + tl, rp = R.top() + tr;
    if (lp <= r[i] && r[i] <= rp)
      L.push(r[i] - tl), R.push(r[i] - tr);
    else if (r[i] >= lp) {
      ans += r[i] - rp;
      R.pop();
      L.push(rp - tl);
      R.push(r[i] - tr);
      R.push(r[i] - tr);
    } else {
      ans += lp - r[i];
      L.pop();
      R.push(lp - tr);
      L.push(r[i] - tl);
      L.push(r[i] - tl);
    }
  }
  printf("%lld\n", ans);

  return 0;
}