Problem p02926 (C++)

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

#define _overload(_1, _2, _3, name, ...) name
#define _rep(i, n) _range(i, 0, n)
#define _range(i, a, b) for (int i = int(a); i < int(b); ++i)
#define rep(...) _overload(__VA_ARGS__, _range, _rep, )(__VA_ARGS__)

#define _rrep(i, n) _rrange(i, n, 0)
#define _rrange(i, a, b) for (int i = int(a) - 1; i >= int(b); --i)
#define rrep(...) _overload(__VA_ARGS__, _rrange, _rrep, )(__VA_ARGS__)

#define _all(arg) begin(arg), end(arg)
#define uniq(arg) sort(_all(arg)), (arg).erase(unique(_all(arg)), end(arg))
#define getidx(ary, key) lower_bound(_all(ary), key) - begin(ary)
#define clr(a, b) memset((a), (b), sizeof(a))
#define bit(n) (1LL << (n))
#define popcount(n) (__builtin_popcountll(n))

using namespace std;

template <class T> bool chmax(T &a, const T &b) {
  return (a < b) ? (a = b, 1) : 0;
}
template <class T> bool chmin(T &a, const T &b) {
  return (b < a) ? (a = b, 1) : 0;
}

using ll = long long;
using R = long double;
const R PI = acos(-1.0);

int main(void) {
  int n;
  cin >> n;
  vector<ll> x(n), y(n);
  rep(i, n) cin >> x[i] >> y[i];

  using state = tuple<R, int>;
  vector<state> ary;

  rep(i, n) {
    if (x[i] == 0 and y[i] == 0)
      continue;
    ary.push_back(state(atan2(y[i], x[i]), i));
  }

  const int m = ary.size();
  sort(begin(ary), end(ary));

  rep(i, m) {
    state entry = ary[i];
    get<0>(entry) += 2.0L * PI;
    ary.push_back(entry);
  }

  ll cx = 0LL, cy = 0LL;
  R ans = 0.0;
  int pos = 0;

  rep(is, m + 1) {
    const int i = get<1>(ary[is]);

    {
      const R tmp = sqrt(cx * cx + cy * cy);
      chmax(ans, tmp);
    }

    while (pos < is + m) {
      const int j = get<1>(ary[pos]);
      const ll dot = x[i] * x[j] + y[i] * y[j];
      const ll det = x[i] * y[j] - y[i] * x[j];

      if (det < 0 or (det == 0 and dot < 0))
        break;
      cx += x[j], cy += y[j];
      const R tmp = sqrt(cx * cx + cy * cy);
      chmax(ans, tmp);

      pos++;
    }

    cx -= x[i], cy -= y[i];
  }

  cout.precision(20);
  cout << fixed << ans << endl;

  return 0;
}


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

#define _overload(_1, _2, _3, name, ...) name
#define _rep(i, n) _range(i, 0, n)
#define _range(i, a, b) for (int i = int(a); i < int(b); ++i)
#define rep(...) _overload(__VA_ARGS__, _range, _rep, )(__VA_ARGS__)

#define _rrep(i, n) _rrange(i, n, 0)
#define _rrange(i, a, b) for (int i = int(a) - 1; i >= int(b); --i)
#define rrep(...) _overload(__VA_ARGS__, _rrange, _rrep, )(__VA_ARGS__)

#define _all(arg) begin(arg), end(arg)
#define uniq(arg) sort(_all(arg)), (arg).erase(unique(_all(arg)), end(arg))
#define getidx(ary, key) lower_bound(_all(ary), key) - begin(ary)
#define clr(a, b) memset((a), (b), sizeof(a))
#define bit(n) (1LL << (n))
#define popcount(n) (__builtin_popcountll(n))

using namespace std;

template <class T> bool chmax(T &a, const T &b) {
  return (a < b) ? (a = b, 1) : 0;
}
template <class T> bool chmin(T &a, const T &b) {
  return (b < a) ? (a = b, 1) : 0;
}

using ll = long long;
using R = long double;
const R PI = acos(-1.0);

int main(void) {
  int n;
  cin >> n;
  vector<ll> x(n), y(n);
  rep(i, n) cin >> x[i] >> y[i];

  using state = tuple<R, int>;
  vector<state> ary;

  rep(i, n) {
    if (x[i] == 0 and y[i] == 0)
      continue;
    ary.push_back(state(atan2(y[i], x[i]), i));
  }

  const int m = ary.size();
  sort(begin(ary), end(ary));

  rep(i, m) {
    state entry = ary[i];
    get<0>(entry) += 2.0L * PI;
    ary.push_back(entry);
  }

  ll cx = 0LL, cy = 0LL;
  R ans = 0.0;
  int pos = 0;

  rep(is, m) {
    const int i = get<1>(ary[is]);

    {
      const R tmp = sqrt(cx * cx + cy * cy);
      chmax(ans, tmp);
    }

    while (pos < is + m) {
      const int j = get<1>(ary[pos]);
      const ll dot = x[i] * x[j] + y[i] * y[j];
      const ll det = x[i] * y[j] - y[i] * x[j];

      if (det < 0 or (det == 0 and dot < 0))
        break;
      cx += x[j], cy += y[j];
      const R tmp = sqrt(cx * cx + cy * cy);
      chmax(ans, tmp);

      pos++;
    }

    cx -= x[i], cy -= y[i];
  }

  cout.precision(20);
  cout << fixed << ans << endl;

  return 0;
}