Problem p03380 (C++)

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

/* FastIO by rsk0315 (last update: 2018/02/21 00:36) */

namespace FastIn {
static constexpr size_t BUF_SIZE = 1 << 17, INT_LEN = 24, FLT_LEN = 400;
static char buf[BUF_SIZE | 1] = {}, *pos = buf, *endbuf = nullptr;
FILE *fin;

inline bool rebuffer() {
  // returns true <=> there is at least one unread character
  size_t rest = endbuf - pos;
  if (buf + rest > pos) {
    // buf[:pos] and buf[-pos:] are overlapping, which std::memcpy()
    // causes undefined behavior.
    return true;
  }

  std::memcpy(buf, pos, rest);
  pos = buf;
  size_t len = std::fread(pos + rest, 1, BUF_SIZE - rest, fin);
  *(endbuf = buf + (rest + len)) = 0;

  return *pos;
}

inline bool scan(char &in) {
  if ((in = *pos)) {
    ++pos;
    return true;
  }

  return rebuffer() && (in = *pos++);
}

inline bool scan(char *in) {
  if ((*in = *pos) == 0) {
    if (rebuffer() && (*in = *pos) == 0) {
      return false;
    }
  }
  ++in;
  while (true) {
    if ((*in = *pos++) == 0) {
      if (rebuffer() && (*in = *pos++) == 0) {
        return true;
      }
    }
    ++in;
  }
}

inline bool scan(double &in) {
  if (pos + FLT_LEN >= endbuf && !rebuffer()) {
    in = 0.0;
    return false;
  }

  char *tmp;
  in = std::strtod(pos, &tmp);
  pos = tmp;
  return true;
}

template <class Int> inline bool scan(Int &in) {
  in = 0;

  // assume that no redundant whitespace appears
  if (pos + INT_LEN >= endbuf && !rebuffer()) {
    return false;
  }

  if (std::is_signed<Int>::value) {
    if (*pos == '-') {
      in = ~*++pos + '1';
      while (*++pos >= '0') {
        in = in * 10 + ~*pos + '1';
      }
      ++pos;
      return true;
    }
  }

  // assume that numbers are separated by the character whose value is
  // less than '0' (e.g. whitespaces, newlines)
  do {
    in = in * 10 + *pos - '0';
  } while (*++pos >= '0');
  ++pos;
  return true;
}

inline bool eat() {
  if (*pos > ' ') {
    return true;
  }

  do {
    if (*pos == 0 && !rebuffer()) {
      return false;
    }
  } while (*++pos <= ' ');

  return true;
}

inline bool eat(char ch) {
  if (*pos == ch) {
    return true;
  }

  do {
    if (*pos == 0 && !rebuffer()) {
      return false;
    }
  } while (*++pos != ch);

  return true;
}

class Scanner {
  bool rebuffer() { return FastIn::rebuffer(); }

public:
  Scanner(FILE *fin = stdin) {
    FastIn::fin = fin;
    endbuf = pos + std::fread(buf, 1, BUF_SIZE, fin);
  }

  template <class T> inline bool scan(T &in) { return FastIn::scan(in); }

  template <class First, class... Rest>
  inline bool scan(First &in, Rest &...ins) {
    return scan(in) && scan(ins...);
  }
};
} // namespace FastIn

int main() {
  FastIn::Scanner in;
  long N;
  in.scan(N);
  vector<long> A(N);
  for (auto &i : A)
    in.scan(i);
  swap(*max_element(A.begin(), A.end()), *A.end());
  long m = A[N - 1];
  cout << A[N - 1] << " "
       << *min_element(
              A.begin(), A.end() - 1,
              [&m](auto a, auto b) { return a * (m - a) > b * (m - b); })
       << endl;
}


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

/* FastIO by rsk0315 (last update: 2018/02/21 00:36) */

namespace FastIn {
static constexpr size_t BUF_SIZE = 1 << 17, INT_LEN = 24, FLT_LEN = 400;
static char buf[BUF_SIZE | 1] = {}, *pos = buf, *endbuf = nullptr;
FILE *fin;

inline bool rebuffer() {
  // returns true <=> there is at least one unread character
  size_t rest = endbuf - pos;
  if (buf + rest > pos) {
    // buf[:pos] and buf[-pos:] are overlapping, which std::memcpy()
    // causes undefined behavior.
    return true;
  }

  std::memcpy(buf, pos, rest);
  pos = buf;
  size_t len = std::fread(pos + rest, 1, BUF_SIZE - rest, fin);
  *(endbuf = buf + (rest + len)) = 0;

  return *pos;
}

inline bool scan(char &in) {
  if ((in = *pos)) {
    ++pos;
    return true;
  }

  return rebuffer() && (in = *pos++);
}

inline bool scan(char *in) {
  if ((*in = *pos) == 0) {
    if (rebuffer() && (*in = *pos) == 0) {
      return false;
    }
  }
  ++in;
  while (true) {
    if ((*in = *pos++) == 0) {
      if (rebuffer() && (*in = *pos++) == 0) {
        return true;
      }
    }
    ++in;
  }
}

inline bool scan(double &in) {
  if (pos + FLT_LEN >= endbuf && !rebuffer()) {
    in = 0.0;
    return false;
  }

  char *tmp;
  in = std::strtod(pos, &tmp);
  pos = tmp;
  return true;
}

template <class Int> inline bool scan(Int &in) {
  in = 0;

  // assume that no redundant whitespace appears
  if (pos + INT_LEN >= endbuf && !rebuffer()) {
    return false;
  }

  if (std::is_signed<Int>::value) {
    if (*pos == '-') {
      in = ~*++pos + '1';
      while (*++pos >= '0') {
        in = in * 10 + ~*pos + '1';
      }
      ++pos;
      return true;
    }
  }

  // assume that numbers are separated by the character whose value is
  // less than '0' (e.g. whitespaces, newlines)
  do {
    in = in * 10 + *pos - '0';
  } while (*++pos >= '0');
  ++pos;
  return true;
}

inline bool eat() {
  if (*pos > ' ') {
    return true;
  }

  do {
    if (*pos == 0 && !rebuffer()) {
      return false;
    }
  } while (*++pos <= ' ');

  return true;
}

inline bool eat(char ch) {
  if (*pos == ch) {
    return true;
  }

  do {
    if (*pos == 0 && !rebuffer()) {
      return false;
    }
  } while (*++pos != ch);

  return true;
}

class Scanner {
  bool rebuffer() { return FastIn::rebuffer(); }

public:
  Scanner(FILE *fin = stdin) {
    FastIn::fin = fin;
    endbuf = pos + std::fread(buf, 1, BUF_SIZE, fin);
  }

  template <class T> inline bool scan(T &in) { return FastIn::scan(in); }

  template <class First, class... Rest>
  inline bool scan(First &in, Rest &...ins) {
    return scan(in) && scan(ins...);
  }
};
} // namespace FastIn

int main() {
  FastIn::Scanner in;
  long N;
  in.scan(N);
  vector<long> A(N);
  for (auto &i : A)
    in.scan(i);
  long t = max_element(A.begin(), A.end()) - A.begin();
  swap(A[t], A[N - 1]);
  long m = A[N - 1];
  cout << A[N - 1] << " "
       << *min_element(
              A.begin(), A.end() - 1,
              [&m](auto a, auto b) { return a * (m - a) > b * (m - b); })
       << endl;
}