#include<iostream>
#include<sstream>
#include<algorithm>
#include<map>
#include<set>
#include<queue>
#include<complex>
#include<cstdio>
#include<cstdlib>
#include<cstring>
using namespace std;
#define rep(i,n) for(int i=0;i<(int)n;i++)
#define all(c) (c).begin(),(c).end()
#define pb emplace_back
typedef long long ll;
typedef vector<int> vi;
typedef tuple<int,int> pi;
const int inf=(int)1e9;
const double EPS=1e-9,INF=1e12;
#define dbg(x) cerr<<#x<<" = "<<(x)<<endl;
template<int N,class Tuple> void out(ostream &os,const Tuple &t){}
template<int N,class Tuple,class H,class ...Ts>
void out(ostream &os,const Tuple &t){
if(N)os<<", ";
os<<get<N>(t);
out<N+1,Tuple,Ts...>(os,t);
}
template<class ...Ts>
ostream& operator<<(ostream &os, const tuple<Ts...> &t){
os<<"( "; out<0,tuple<Ts...>,Ts...>(os,t); os<<" )";
return os;
}
template<class T>
ostream& operator<<(ostream &os, const vector<T> &v){
os<<"[ "; rep(i,v.size())os<<v[i]<<(i==v.size()-1?" ]":", ");
return os;
}
template<int N,class Tuple> void in__(istream &is,Tuple &t){}
template<int N,class Tuple,class H,class ...Ts>
void in__(istream &is, Tuple &t){
is>>get<N>(t);
in__<N+1,Tuple,Ts...>(is,t);
}
template<class ...Ts>
istream& operator>>(istream &is, tuple<Ts...> &t){
in__<0,tuple<Ts...>,Ts...>(is,t);
return is;
}
template<class T>
istream& operator>>(istream &is, vector<T> &v){
T tmp; is>>tmp; v.pb(tmp);
return is;
}
int main(){
return 0;
}
備考
- push_backはemplace_backに変更
- make_pairおよびmake_tupleは、tie関数があるためほぼ不要に。なのでマクロからも削除した。
- 範囲for文とautoがあるので、foreachマクロも削除。
- タプル型およびベクタの入出力を定義。入力がかなり楽に。