Problem p03744 (C++)

Buggy submission (status: Runtime Error):
#include <bits/stdc++.h>
#define ll long long
#define INF 1000000005
#define MOD 1000000007
#define EPS 1e-10
#define rep(i, n) for (int i = 0; i < (int)(n); ++i)
#define rrep(i, n) for (int i = (int)(n)-1; i >= 0; --i)
#define srep(i, s, t) for (int i = (int)(s); i < (int)(t); ++i)
#define each(a, b) for (auto &(a) : (b))
#define all(v) (v).begin(), (v).end()
#define len(v) (int)(v).size()
#define zip(v) sort(all(v)), v.erase(unique(all(v)), v.end())
#define cmx(x, y) x = max(x, y)
#define cmn(x, y) x = min(x, y)
#define fi first
#define se second
#define pb push_back
#define show(x) cout << #x << " = " << (x) << endl
#define sar(a, n)                                                              \
  cout << #a << ":";                                                           \
  rep(pachico, n) cout << " " << a[pachico];                                   \
  cout << endl

using namespace std;

template <typename S, typename T> auto &operator<<(ostream &o, pair<S, T> p) {
  return o << "{" << p.fi << "," << p.se << "}";
}
template <typename T> auto &operator<<(ostream &o, set<T> s) {
  for (auto &e : s)
    o << e << " ";
  return o;
}
template <typename S, typename T, typename U>
auto &operator<<(ostream &o, priority_queue<S, T, U> q) {
  while (!q.empty())
    o << q.top() << " ", q.pop();
  return o;
}
template <typename K, typename T> auto &operator<<(ostream &o, map<K, T> &m) {
  for (auto &e : m)
    o << e << " ";
  return o;
}
template <typename T> auto &operator<<(ostream &o, deque<T> v) {
  for (auto &e : v)
    o << e << " ";
  return o;
}
void ashow() { cout << endl; }
template <typename T, typename... A> void ashow(T t, A... a) {
  cout << t << " ";
  ashow(a...);
}
template <typename S, typename T, typename U> struct TRI {
  S fi;
  T se;
  U th;
  TRI() {}
  TRI(S f, T s, U t) : fi(f), se(s), th(t) {}
};
template <typename S, typename T, typename U>
auto &operator<<(ostream &o, TRI<S, T, U> &t) {
  return o << "{" << t.fi << "," << t.se << "," << t.th << "}";
}

typedef pair<int, int> P;
typedef pair<ll, ll> pll;
typedef pair<double, double> pdd;
typedef TRI<int, int, int> tri;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<vi> vvi;
typedef vector<vl> vvl;
typedef vector<P> vp;
typedef vector<double> vd;
typedef vector<string> vs;

const int MAX_N = 100005;

// 温度, 量
deque<pdd> deq;

int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  ll n, L;
  cin >> n >> L;
  double nw = 0;
  ll t, v;
  cin >> t >> v;
  deq.pb(pdd(t, v));
  printf("%.12lf\n", (nw += t * v) / L);
  rep(i, n - 1) {
    ll t, v;
    cin >> t >> v;
    double sm = 0;
    while (true) {
      pdd &p = deq.front();
      if (sm + p.se < v) {
        sm += p.se;
        nw -= p.fi * p.se;
        deq.pop_front();
      } else {
        nw -= p.fi * (v - sm);
        p.se -= v - sm;
        break;
      }
    }
    double made = t * v, ryo = v;
    while (true) {
      pdd &p = deq.back();
      if (p.fi * ryo < made) {
        deq.pb(pdd(made / ryo, ryo));
        break;
      } else {
        made += p.fi * p.se;
        ryo += p.se;
        deq.pop_back();
      }
    }
    printf("%.12lf\n", (nw += t * v) / L);
  }
  return 0;
}


Fixed submission:
#include <bits/stdc++.h>
#define ll long long
#define INF 1000000005
#define MOD 1000000007
#define EPS 1e-10
#define rep(i, n) for (int i = 0; i < (int)(n); ++i)
#define rrep(i, n) for (int i = (int)(n)-1; i >= 0; --i)
#define srep(i, s, t) for (int i = (int)(s); i < (int)(t); ++i)
#define each(a, b) for (auto &(a) : (b))
#define all(v) (v).begin(), (v).end()
#define len(v) (int)(v).size()
#define zip(v) sort(all(v)), v.erase(unique(all(v)), v.end())
#define cmx(x, y) x = max(x, y)
#define cmn(x, y) x = min(x, y)
#define fi first
#define se second
#define pb push_back
#define show(x) cout << #x << " = " << (x) << endl
#define sar(a, n)                                                              \
  cout << #a << ":";                                                           \
  rep(pachico, n) cout << " " << a[pachico];                                   \
  cout << endl

using namespace std;

template <typename S, typename T> auto &operator<<(ostream &o, pair<S, T> p) {
  return o << "{" << p.fi << "," << p.se << "}";
}
template <typename T> auto &operator<<(ostream &o, set<T> s) {
  for (auto &e : s)
    o << e << " ";
  return o;
}
template <typename S, typename T, typename U>
auto &operator<<(ostream &o, priority_queue<S, T, U> q) {
  while (!q.empty())
    o << q.top() << " ", q.pop();
  return o;
}
template <typename K, typename T> auto &operator<<(ostream &o, map<K, T> &m) {
  for (auto &e : m)
    o << e << " ";
  return o;
}
template <typename T> auto &operator<<(ostream &o, deque<T> v) {
  for (auto &e : v)
    o << e << " ";
  return o;
}
void ashow() { cout << endl; }
template <typename T, typename... A> void ashow(T t, A... a) {
  cout << t << " ";
  ashow(a...);
}
template <typename S, typename T, typename U> struct TRI {
  S fi;
  T se;
  U th;
  TRI() {}
  TRI(S f, T s, U t) : fi(f), se(s), th(t) {}
};
template <typename S, typename T, typename U>
auto &operator<<(ostream &o, TRI<S, T, U> &t) {
  return o << "{" << t.fi << "," << t.se << "," << t.th << "}";
}

typedef pair<int, int> P;
typedef pair<ll, ll> pll;
typedef pair<double, double> pdd;
typedef TRI<int, int, int> tri;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<vi> vvi;
typedef vector<vl> vvl;
typedef vector<P> vp;
typedef vector<double> vd;
typedef vector<string> vs;

const int MAX_N = 100005;

// 温度, 量
deque<pdd> deq;

int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  ll n, L;
  cin >> n >> L;
  double nw = 0;
  ll t, v;
  cin >> t >> v;
  deq.pb(pdd(t, v));
  printf("%.12lf\n", (nw += t * v) / L);
  rep(i, n - 1) {
    ll t, v;
    cin >> t >> v;
    double sm = 0;
    while (true) {
      pdd &p = deq.front();
      if (sm + p.se < v) {
        sm += p.se;
        nw -= p.fi * p.se;
        deq.pop_front();
      } else {
        nw -= p.fi * (v - sm);
        p.se -= v - sm;
        break;
      }
    }
    double made = t * v, ryo = v;
    while (true) {
      pdd &p = deq.back();
      if (p.fi * ryo < made) {
        deq.pb(pdd(made / ryo, ryo));
        break;
      } else {
        made += p.fi * p.se;
        ryo += p.se;
        deq.pop_back();
        if (deq.empty()) {
          deq.pb(pdd(made / ryo, ryo));
          break;
        }
      }
    }
    printf("%.12lf\n", (nw += t * v) / L);
  }
  return 0;
}