#ifndef MY_H_G #define MY_H_G #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace std{ inline unsigned long long nanoTime(){ return std::chrono::high_resolution_clock::now().time_since_epoch().count(); } } static pcg64_fast h_gen(std::nanoTime()); static std::uniform_int_distribution h_dis_ulong(std::numeric_limits::min(),std::numeric_limits::max()); static std::uniform_int_distribution h_dis_uint(std::numeric_limits::min(),std::numeric_limits::max()); static std::uniform_real_distribution h_dis_double(0.0,1.0); template inline std::ostream& operator<<(std::ostream& o,const std::vector& vec){ o << "["; for(unsigned int i = 0;i < vec.size();i++){ o << vec[i]; if(i < vec.size() - 1)o << ", "; } o << "]"; return o; } template<> inline std::ostream& operator<<(std::ostream& o,const std::vector& vec){ o << "["; for(unsigned int i = 0;i < vec.size();i++){ o << (int)vec[i]; if(i < vec.size() - 1)o << ", "; } o << "]"; return o; } namespace std{ inline double random(){ return h_dis_double(h_gen); } template inline T random(){ return (T)0; } template<> inline double random(){ return h_dis_double(h_gen); } template<> inline unsigned long long random(){ return h_dis_ulong(h_gen); } template<> inline unsigned int random() { return h_dis_uint(h_gen); } } #endif