bbb的快读模板

ios对cin的加速欺骗了我,md数据量稍微大一点就TLE了,不太靠谱,搞一波bbb群主的快读板子,用于对付卡常用,虽然一般感觉用不到叭,sacnf够用了,但搞上一波没啥坏处

using namespace std;
typedef long long ll;

#define repi(i,b,e) for (int i = (b), _ = (e); i < _; ++i)
#define rep(i,b,e)  for (int i = (b), _ = (e); i <= _; ++i)
#define repr(i,b,e) for (int i = (b), _ = (e); i >= _; --i)
#define repit(t,i,c) for (t i = (c).begin(); i != (c).end(); ++i)

template <typename T>
T& up_mx(T& v, T nv)
{
    if (v < nv) v = nv;
    return v;
}

template <typename T>
T& up_mn(T& v, T nv)
{
    if (v > nv) v = nv;
    return v;
}

static int sc_ret = 0;
struct _sp
{
    _sp& operator >> (char& v) { sc_ret = scanf(" %c", &v); return *this; }
    _sp& operator >> (int& v) { sc_ret = scanf("%d", &v); return *this; }
    _sp& operator >> (unsigned& v) { sc_ret = scanf("%u", &v); return *this; }
    _sp& operator >> (double& v) { sc_ret = scanf("%lf", &v); return *this; }
    _sp& operator >> (char* v) { sc_ret = scanf("%s", v); return *this; }
    _sp& operator >> (string& v) { sc_ret = (bool)(cin >> v); return *this; }
    _sp& operator >> (ll& v) { sc_ret = read(v); return *this; }
    _sp& ch(char& v) { v = sc_ret = getchar(); return *this; }
    _sp& gets(char* v) { sc_ret = fgets(v, INT_MAX, stdin) != 0; v[strlen(v) - 1] = 0; return *this; }
    operator bool() const { return sc_ret > 0; }
    template <typename T>
    int read(T& v)
    {
        T k = 1; v = 0;
        int c = getchar();
        while (c < '0' || c > '9')
        {
            if (c == '-') k = 0;
            c = getchar();
        }
        while (c >= '0' && c <= '9') v = (v << 3) + (v << 1) + (c - 48), c = getchar();
        if (k == 0) v = -v;
        return c;
    }
    _sp& operator<<(char v) { putchar(v); return *this; }
    _sp& operator<<(int v) { printf("%d", v); return *this; }
    _sp& operator<<(unsigned v) { printf("%u", v); return *this; }
    _sp& operator<<(double v) { printf("%.2f", v); return *this; }
    _sp& operator()(const char* fmt, double v) { printf(fmt, v); return *this; }
    _sp& operator<<(const char* v) { printf("%s", v); return *this; }
    _sp& operator<<(string v) { printf("%s", v.c_str()); return *this; }
    _sp& operator<<(ll v) { write(v); return *this; }
    void flush() { fflush(stdout); }
    template <typename T>
    void write(T v)
    {
        int cnt = 0; char c[23];
        if (v == 0) { putchar('0'); return; }
        if (v < 0) putchar('-'), v = -v;
        while (v) c[++cnt] = (v % 10) + 48, v /= 10;
        while (cnt > 0) putchar(c[cnt--]);
    }
}io;
struct fastio
{ fastio() { cin.tie(0); ios::sync_with_stdio(0); } }fio;
namespace cio
{ _sp& qin = io; _sp& qout = io; char nl = '\n'; }
namespace cppio
{ istream& qin = std::cin; ostream& qout = std::cout; char nl = '\n'; }
using namespace cio;

template <typename T>
void arrln(T* arr, int size, char split = ' ')
{
    if (size > 0)
    {
        qout << arr[0];
        for (int i = 1; i < size; ++i)
            qout << split, qout << arr[i];
    }
    qout << '\n';
}

猜你喜欢

转载自blog.csdn.net/yangzijiangac/article/details/106007059
bbb