head

head

#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=(a),i##_end=(b);i<=i##_end;++i)
#define per(i,a,b) for(int i=(b),i##_end=(a);i>=i##_end;--i)
#define For(i,a,b) for(int i=(a),i##_end=(b);i<i##_end;++i)
#define foe(i,a) for(__typeof(a.begin())i=a.begin();i!=a.end();++i)
#define X first
#define Y second
#define mp make_pair
#define pb push_back
#define SZ(x) ((int)(x).size())
#define all(x) (x).begin(),(x).end()
typedef double ld;
typedef long long L;
typedef vector<int> VI;
typedef pair<int,int> pa;
#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=(a),i##_end=(b);i<=i##_end;++i)
#define per(i,a,b) for(int i=(b),i##_end=(a);i>=i##_end;--i)
#define For(i,a,b) for(int i=(a),i##_end=(b);i<i##_end;++i)
#define foe(i,a) for(__typeof(a.begin())i=a.begin();i!=a.end();++i)
#define X first
#define Y second
#define mp make_pair
#define pb push_back
#define SZ(x) ((int)(x).size())
#define all(x) (x).begin(),(x).end()
#define Es(x,i) for(Edge *i=G[x];i;i=i->nxt)
typedef double ld;
typedef long long L;
typedef long double lf;
typedef unsigned int uint;
typedef unsigned long long uL;
typedef pair<int,int> pii;
const int inf=0x3f3f3f3f,mo=1e9+7;
template<typename A,typename B>inline bool upmx(A&x,const B&y){return x<y?x=y,1:0;}
template<typename A,typename B>inline bool upmn(A&x,const B&y){return x>y?x=y,1:0;}
template<typename T>inline T gcd(T x,T y){for(;y;swap(x,y))x%=y;return x;}
inline int Pow(int a,int b,int p=mo){int r=1;for(;b;b>>=1,a=1ll*a*a%p)if(b&1)r=1ll*r*a%p;return r;}
#ifdef flukehn
#define debug(...) fprintf(stderr, __VA_ARGS__)
#else
#define debug(...)
#endif
char *TT,*tmo,but[(1<<15)+2];
#define getc() ((TT==tmo&&(tmo=((TT=but)+fread(but,1,1<<15,stdin)),TT==tmo))?-1:*TT++)
inline int rd(){
  int x,c,f=1;while(!isdigit(c=getc()))f=c!='-';x=c-'0';
  while(isdigit(c=getc()))x=x*10+c-'0';return f?x:-x;
}

fast_i

char *TT,*tmo,but[(1<<15)+2];
#define getchar() ((TT==tmo&&(tmo=((TT=but)+fread(but,1,1<<15,stdin)),TT==tmo))?-1:*TT++)
template<typename T>inline bool upmx(T&a,const T&b){return a<b?a=b,1:0;}
template<typename T>inline bool upmn(T&a,const T&b){return a>b?a=b,1:0;}
template<typename T>inline T gcd(T a,T b){while(b)a%=b,swap(a,b);return a;}

mcfx_io
mcfx

frw

struct Frw{
  char *TT,*tmo,but[(1<<15)+2],butt[(1<<15)+2],*bp,*bq;
  Frw(){bp=butt,bq=butt+(1<<15);}
  ~Frw(){fwrite(butt,1,bp-butt,stdout);}
  #define getc() ((TT==tmo&&(tmo=((TT=but)+fread(but,1,1<<15,stdin)),TT==tmo))?-1:*TT++)
  #define RX {char c,f=1;while(!isdigit(c=getc()))f=c!='-';x=c-'0';
    while(isdigit(c=getc()))x=x*10+c-'0';return f?x:-x;}
  inline operator int(){int x;RX;}
  inline void pr(char x){*bp=x;(++bp==bq)?fwrite(butt,1,1<<15,stdout),bp=butt:0;}
  inline void operator ()(int x){
    if(!x)return pr('0');
    if(x<0)pr('-'),x=-x;
    static int s[12];int p=0;
    while(x)s[p++]=x%10,x/=10;
    for(int i=p-1;~i;--i)pr(s[i]+'0');
  }
}it;

fast_o

char butt[(1<<15)+2],*bp=butt,*bq=butt+(1<<15);
inline void pr(char x){
	*bp=x;(++bp==bq)?fwrite(butt,1,1<<15,stdout),bp=butt:0;
}
inline void write(int x){
	if(!x)pr('0');
	else{
		if(x<0)pr('-'),x=-x;
		static int s[12];
		int p=0;
		while(x)s[p++]=x%10,x/=10;
		for(int i=p-1;~i;--i)pr(s[i]+'0');
	}
}

rand

struct Rand{
	Rand(){srand(time(0));}
	operator int(){return (rand()<<15)^rand();}
	operator ll(){ll a=rand(),b=rand(),c=rand(),d=rand();return (a<<45)^(b<<30)^(c<<15)^d;}
}_r;

math

namespace Math{
	inline ll mul(ll n,ll m,ll p){ll r=0;for(;m;m>>=1,n=(n+n)%p)if(m&1)r=(r+n)%p;return r;}
	inline int pw(int n,int m,int p){int r=1;for(;m;m>>=1,n=(ll)n*n%p)if(m&1)r=(ll)r*n%p;return r;}
	inline ll pwl(ll n,ll m,ll p){ll r=1;for(;m;m>>=1,n=mul(n,n,p))if(m&1)r=mul(r,n,p);return r;}
	const int pri[] = {2, 325, 9375, 28178, 450775, 9780504, 1795265022};
	inline bool isp_bf(ll n){
		if(n<2)return 0;
		if(n==2)return 1;
		for(ll i=2;i*i<=n;++i){
			if(n%i==0)return 0;
		}
		return 1;
	}
	inline bool Miller_rabin(ll n){
        ll q=n-1;int y=0;
		while(!(q&1))q>>=1,++y;
		For(i,0,7){
			ll x=pwl(pri[i],q,n);
			For(_,0,y){
				ll t=mul(x,x,n);
				if(t==1){
					if(x!=1&&x!=n-1)return 0;
					else{x=1;break;}
				}
				x=t;
			}
			if(x!=1)return 0;
		}
		return 1;
    }
	inline bool isp(ll n){
		if(n>2&&!(n&1))return 0;
		if(n<=1000)return isp_bf(n);
		else return Miller_rabin(n);
	}
}

head2:

#define I inline
#define OP operator
#define RT return *this
I bool IS(char x){return x==10||x==13||x==' ';}
struct Cg{I char OP()(){return getchar();}};struct Cp{I void OP()(char x){putchar(x);}};
#define RX char c,f=1;while(!isdigit(c=P()))f=c!='-';x=c-'0';while(isdigit(c=P()))x=x*10+c-'0';x=f?x:-x
#define TR *this,x;return x
struct Fr{Cg P;I Fr&OP,(int&x){RX;RT;}I OP int(){int x;TR;}I Fr&OP,(ll &x){RX;RT;}I OP ll(){ll x;TR;}
I Fr&OP,(char&x){while(IS(x=P()));RT;}I OP char(){char x;TR;}
I Fr&OP,(char*x){char t=P();for(;IS(t);t=P());if(~t){for(;!IS(t)&&~t;t=P())*x++=t;}*x++=0;RT;}}in;
#define WI if(x){if(x<0)P('-'),x=-x;char s[22],c=0;while(x)s[c++]=x%10+'0',x/=10;while(c--)P(s[c]);}else P('0')
struct Fw{Cp P;I Fw&OP,(int x){WI;RT;}I Fw&OP,(ll x){WI;RT;}I Fw&OP,(char x){P(x);RT;}
I Fw&OP,(const char *x){while(*x)P(*x++);RT;}}out;
原文地址:https://www.cnblogs.com/flukehn/p/7742959.html