This documentation is automatically generated by online-judge-tools/verification-helper
View the Project on GitHub kmyk/competitive-programming-library
#include "hack/fastio_scanner.hpp"
#pragma once
#include <algorithm>
#include <cassert>
#include <cstdlib>
#include <cstring>
#include <string>
#include <type_traits>
#include <unistd.h>
class scanner {
static constexpr int N = 131072;
static constexpr int K = 64;
char buf[K + N];
int l = 0;
int r = 0;
void flush() {
if (K < r - l) return;
memmove(buf + K - (r - l), buf + l, r - l);
l = K - (r - l);
r = K + read(STDIN_FILENO, buf + K, N);
assert (l < r);
}
void prepare() {
flush();
while (isspace(buf[l])) {
++ l;
flush();
}
}
public:
scanner() = default;
scanner(const scanner &) = delete;
scanner & operator = (const scanner &) = delete;
template <class Char, std::enable_if_t<std::is_same<Char, char>::value, int> = 0>
inline char get() {
prepare();
return buf[l ++];
}
template <class String, std::enable_if_t<std::is_same<String, std::string>::value, int> = 0>
std::string get() {
prepare();
std::string s;
do {
s.push_back(buf[l ++]);
if (r == l) flush();
} while (not isspace(buf[l]));
return s;
}
template <class Integer, std::enable_if_t<std::is_integral<Integer>::value, int> = 0>
Integer get() {
prepare();
bool is_negative = false;
if (std::is_signed<Integer>::value and buf[l] == '-') {
is_negative = true;
++ l;
}
Integer x = 0;
while (l < r and isdigit(buf[l])) {
x = 10 * x + buf[l] - '0';
++ l;
}
if (std::is_signed<Integer>::value and is_negative) {
x *= -1;
}
return x;
}
};
#line 2 "hack/fastio_scanner.hpp"
#include <algorithm>
#include <cassert>
#include <cstdlib>
#include <cstring>
#include <string>
#include <type_traits>
#include <unistd.h>
class scanner {
static constexpr int N = 131072;
static constexpr int K = 64;
char buf[K + N];
int l = 0;
int r = 0;
void flush() {
if (K < r - l) return;
memmove(buf + K - (r - l), buf + l, r - l);
l = K - (r - l);
r = K + read(STDIN_FILENO, buf + K, N);
assert (l < r);
}
void prepare() {
flush();
while (isspace(buf[l])) {
++ l;
flush();
}
}
public:
scanner() = default;
scanner(const scanner &) = delete;
scanner & operator = (const scanner &) = delete;
template <class Char, std::enable_if_t<std::is_same<Char, char>::value, int> = 0>
inline char get() {
prepare();
return buf[l ++];
}
template <class String, std::enable_if_t<std::is_same<String, std::string>::value, int> = 0>
std::string get() {
prepare();
std::string s;
do {
s.push_back(buf[l ++]);
if (r == l) flush();
} while (not isspace(buf[l]));
return s;
}
template <class Integer, std::enable_if_t<std::is_integral<Integer>::value, int> = 0>
Integer get() {
prepare();
bool is_negative = false;
if (std::is_signed<Integer>::value and buf[l] == '-') {
is_negative = true;
++ l;
}
Integer x = 0;
while (l < r and isdigit(buf[l])) {
x = 10 * x + buf[l] - '0';
++ l;
}
if (std::is_signed<Integer>::value and is_negative) {
x *= -1;
}
return x;
}
};