读写模板
自适应
template<typename T>void rd(T&x){int f=0,c;while(!isdigit(c=getchar()))f^=!(c^45);x=(c&15);while(isdigit(c=getchar()))x=x*10+(c&15);if(f)x=-x;} template<typename T>void pt(T x,int c=-1){if(x<0)putchar('-'),x=-x;if(x>9)pt(x/10);putchar(x%10+48);if(c!=-1)putchar(c);}
极限快读
static char buf[100000], * pa = buf, * pb = buf; #define gc pa==pb&&(pb=(pa=buf)+fread(buf,1,100000,stdin),pa==pb)?EOF:*pa++ inline long long int read(){ long long int x(0); char c(gc); while (c < '0' || c>'9')c = gc; while (c >= '0' && c <= '9')x = (x << 1) + (x << 3) + (c ^ 48), c = gc; return x; }
快读快写
感觉下面这个不是很快
namespace IO { const int buffer_size = 1e5 + 5; char buf[buffer_size], *S, *T; bool flag_EOF; inline char read_char() { if (S == T) T = (S = buf) + fread(buf, 1, buffer_size, stdin); return S != T ? *(S++) : EOF; } inline long long read_int() { int flag = 1; char c = read_char(); while (c < '0' || c > '9') { if (c == EOF) { flag_EOF = true; return 0; } flag = (c == '-' ? -1 : 1); c = read_char(); } long long x = 0; while (c >= '0' && c <= '9') { x = x * 10 + (c ^ 48); c = read_char(); } return x * flag; } char st[13]; int _top; inline void Write(int x) { if (!x) { putchar('0'); return; } if (x < 0) { putchar('-'); x = -x; } while (x) { st[++_top] = x % 10 + '0'; x /= 10; } while (_top > 0) putchar(st[_top--]); } } // namespace IO