template<typename T>void read (T &x){
T f =1; x =0;char tem = getchar ();while(tem <'0'|| tem >'9'){if(tem =='-') f =-1;
tem = getchar ();}while(tem >='0'&& tem <='9'){
x =(x <<1)+(x <<3)+ tem -'0';
tem = getchar ();}
x *= f;}
快速输出
(1).递归写法
template<typename T>voidwrite(T x){if(x <0) x =-x,putchar('-');if(x >9)write(x /10);putchar(x %10+'0');}
(2).栈写法
template<typename T>voidwrite(T x){if(x <0){putchar('-');
x =-x;}
stack<char> s;int cnt =0;while(x !=0){
s.push(x %10+'0');
x /=10;}while(!s.empty()){putchar(s.top());
s.pop();}}
压行
template<typename T>void read (T &x){x =0; T f =1;char tem = getchar ();while(tem <'0'|| tem >'9'){if(tem =='-') f =-1;tem = getchar ();}while(tem >='0'&& tem <='9'){x =(x <<1)+(x <<3)+ tem -'0';tem = getchar ();}x *= f;}template<typename T>void write (T x){if(x <0){x =-x;putchar ('-');}if(x >9) write (x /10);putchar (x %10+'0');}