--- tags: codebook --- # rit/wit ## C++14(up) ```cpp= #include<iostream> #include<vector> #include<cctype> #include<limits> #include<algorithm> using namespace std; template<typename T> bool rit(T& x) { cout << "no speed up" << endl; return bool(cin >> x); } template<> bool rit<int>(int& ret) { ret = 0; bool b = false; char c = cin.rdbuf()->sbumpc(); while (!isdigit(c)) { if (c == EOF) return false; b = (c == '-' ? true : b); c = cin.rdbuf()->sbumpc(); } while (isdigit(c)) ret = ret * 10 + c - '0', c = cin.rdbuf()->sbumpc(); ret = b ? -ret : ret; return true; } template<> bool rit<long long>(long long& ret) { ret = 0; bool b = false; char c = cin.rdbuf()->sbumpc(); while (!isdigit(c)) { if (c == EOF) return false; b = (c == '-' ? true : b); c = cin.rdbuf()->sbumpc(); } while (isdigit(c)) ret = ret * 10 + c - '0', c = cin.rdbuf()->sbumpc(); ret = b ? -ret : ret; return true; } template<> bool rit<unsigned>(unsigned& re) { re = 0; char c = cin.rdbuf()->sbumpc(); while (!isdigit(c)) { if (c == EOF) return false; c = cin.rdbuf()->sbumpc(); } while (isdigit(c)) re = re * 10 + c - '0', c = cin.rdbuf()->sbumpc(); return true; } template<> bool rit<unsigned long long>(unsigned long long& re) { re = 0; char c = cin.rdbuf()->sbumpc(); while (!isdigit(c)) { if (c == EOF) return false; c = cin.rdbuf()->sbumpc(); } while (isdigit(c)) re = re * 10 + c - '0', c = cin.rdbuf()->sbumpc(); return true; } /* template<typename...Args> void scan(Args&...args) { (rit(args), ...); } */ template<typename... Args> void scan(Args&... args) { initializer_list<bool> {(rit(args), false)...}; } template<typename T> void wit(T&& x) { cout << x; } template<> void wit<char>(char&& x) { cout.rdbuf()->sputc(x); } template<> void wit<int>(int&& x) { if (!x) cout.rdbuf()->sputc('0'); char tmp[10]; int cnt = 0; bool b = false; if (x & numeric_limits<int>::min()) tmp[cnt++] = -(x % 10) + '0', x /= -10, b = true; while (x) tmp[cnt++] = x % 10 + '0', x /= 10; if (b) cout.rdbuf()->sputc('-'); while (cnt--) cout.rdbuf()->sputc(tmp[cnt]); } template<> void wit<long long>(long long&& x) { if (!x) cout.rdbuf()->sputc('0'); char tmp[19]; int cnt = 0; bool b = false; if (x & numeric_limits<long long>::min()) tmp[cnt++] = -(x % 10) + '0', x /= -10, b = true; while (x) tmp[cnt++] = x % 10 + '0', x /= 10; if (b) cout.rdbuf()->sputc('-'); while (cnt--) cout.rdbuf()->sputc(tmp[cnt]); } template<> void wit<unsigned>(unsigned&& x) { if (!x) cout.rdbuf()->sputc('0'); char tmp[10]; int cnt = 0; while (x) tmp[cnt++] = x % 10 + '0', x /= 10; while (cnt--) cout.rdbuf()->sputc(tmp[cnt]); } template<> void wit<unsigned long long>(unsigned long long&& x) { if (!x) cout.rdbuf()->sputc('0'); char tmp[19]; int cnt = 0; while (x) tmp[cnt++] = x % 10 + '0', x /= 10; while (cnt--) cout.rdbuf()->sputc(tmp[cnt]); } /* template<typename ...Args> void print(Args&&... args) { (wit(args), ...), wit('\n'); } */ template<typename... Args> void print(Args... args) { initializer_list<bool> {(wit(args), false)...}; wit('\n'); } ostream& operator<<(ostream& os, const vector<auto>& v) { for (const auto& i : v) wit(i), wit(' '); return os; } ostream& operator<<(ostream& os, const pair<auto, auto>& p) { wit(p.first), wit(' '), wit(p.second), wit('\n'); return os; } /* ostream& operator<<(ostream& os, const vector<pair<auto, auto>>& v) { for (const auto& [i, j] : v) wit(i), wit(' '), wit(j), wit(' '); return os; } */ ostream& operator<<(ostream& os, const vector<pair<auto, auto>>& v) { for (const auto& i : v) wit(i.first), wit(' '), wit(i.second), wit(' '); return os; } istream& operator>>(istream& is, vector<auto>& v) { for (auto& i : v) rit(i); return is; } istream& operator>>(istream& is, pair<auto, auto>& p) { rit(p.first), rit(p.second); return is; } /* istream& operator>>(istream& is, vector<pair<auto, auto>>& v) { for (auto& [i, j] : v) rit(i), rit(j); return is; } */ istream& operator>>(istream& is, vector<pair<auto, auto>>& v) { for (auto& i : v) rit(i.first), rit(i.second); return is; } int main() { cin.tie(nullptr); cout.tie(nullptr); ios::sync_with_stdio(false); int n; rit(n); vector<int> v(n); for (auto& i : v) rit(i); sort(v.begin(), v.end()); for (auto && i : v) wit(i), wit(' '); return 0; } ``` ## C++17(up) ```cpp= #include<iostream> #include<vector> #include<cctype> #include<limits> #include<algorithm> using namespace std; template<typename T> bool rit(T& x) { cout << "no speed up" << endl; return bool(cin >> x); } template<> bool rit<int>(int& ret) { ret = 0; bool b = false; char c = cin.rdbuf()->sbumpc(); while (!isdigit(c)) { if (c == EOF) return false; b = (c == '-' ? true : b); c = cin.rdbuf()->sbumpc(); } while (isdigit(c)) ret = ret * 10 + c - '0', c = cin.rdbuf()->sbumpc(); ret = b ? -ret : ret; return true; } template<> bool rit<long long>(long long& ret) { ret = 0; bool b = false; char c = cin.rdbuf()->sbumpc(); while (!isdigit(c)) { if (c == EOF) return false; b = (c == '-' ? true : b); c = cin.rdbuf()->sbumpc(); } while (isdigit(c)) ret = ret * 10 + c - '0', c = cin.rdbuf()->sbumpc(); ret = b ? -ret : ret; return true; } template<> bool rit<unsigned>(unsigned& re) { re = 0; char c = cin.rdbuf()->sbumpc(); while (!isdigit(c)) { if (c == EOF) return false; c = cin.rdbuf()->sbumpc(); } while (isdigit(c)) re = re * 10 + c - '0', c = cin.rdbuf()->sbumpc(); return true; } template<> bool rit<unsigned long long>(unsigned long long& re) { re = 0; char c = cin.rdbuf()->sbumpc(); while (!isdigit(c)) { if (c == EOF) return false; c = cin.rdbuf()->sbumpc(); } while (isdigit(c)) re = re * 10 + c - '0', c = cin.rdbuf()->sbumpc(); return true; } template<typename...Args> void scan(Args&...args) { (rit(args), ...); } template<typename T> void wit(T&& x) { cout << x; } template<> void wit<char>(char&& x) { cout.rdbuf()->sputc(x); } template<> void wit<int>(int&& x) { if (!x) cout.rdbuf()->sputc('0'); char tmp[10]; int cnt = 0; bool b = false; if (x & numeric_limits<int>::min()) tmp[cnt++] = -(x % 10) + '0', x /= -10, b = true; while (x) tmp[cnt++] = x % 10 + '0', x /= 10; if (b) cout.rdbuf()->sputc('-'); while (cnt--) cout.rdbuf()->sputc(tmp[cnt]); } template<> void wit<long long>(long long&& x) { if (!x) cout.rdbuf()->sputc('0'); char tmp[19]; int cnt = 0; bool b = false; if (x & numeric_limits<long long>::min()) tmp[cnt++] = -(x % 10) + '0', x /= -10, b = true; while (x) tmp[cnt++] = x % 10 + '0', x /= 10; if (b) cout.rdbuf()->sputc('-'); while (cnt--) cout.rdbuf()->sputc(tmp[cnt]); } template<> void wit<unsigned>(unsigned&& x) { if (!x) cout.rdbuf()->sputc('0'); char tmp[10]; int cnt = 0; while (x) tmp[cnt++] = x % 10 + '0', x /= 10; while (cnt--) cout.rdbuf()->sputc(tmp[cnt]); } template<> void wit<unsigned long long>(unsigned long long&& x) { if (!x) cout.rdbuf()->sputc('0'); char tmp[19]; int cnt = 0; while (x) tmp[cnt++] = x % 10 + '0', x /= 10; while (cnt--) cout.rdbuf()->sputc(tmp[cnt]); } template<typename ...Args> void print(Args&&... args) { (wit(args), ...), wit('\n'); } ostream& operator<<(ostream& os, const vector<auto>& v) { for (const auto& i : v) wit(i), wit(' '); return os; } ostream& operator<<(ostream& os, const pair<auto, auto>& p) { wit(p.first), wit(' '), wit(p.second), wit('\n'); return os; } ostream& operator<<(ostream& os, const vector<pair<auto, auto>>& v) { for (const auto& [i, j] : v) wit(i), wit(' '), wit(j), wit(' '); return os; } istream& operator>>(istream& is, vector<auto>& v) { for (auto& i : v) rit(i); return is; } istream& operator>>(istream& is, pair<auto, auto>& p) { rit(p.first), rit(p.second); return is; } istream& operator>>(istream& is, vector<pair<auto, auto>>& v) { for (auto& [i, j] : v) rit(i), rit(j); return is; } int main() { cin.tie(nullptr); cout.tie(nullptr); ios::sync_with_stdio(false); int n; rit(n); vector<int> v(n); for (auto& i : v) rit(i); sort(v.begin(), v.end()); for (auto && i : v) wit(i), wit(' '); return 0; } ```