diff --git a/include.hh b/include.hh new file mode 100644 index 0000000..1774034 --- /dev/null +++ b/include.hh @@ -0,0 +1,42 @@ +#include +using namespace std; + +using ll = int64_t; +using ull = uint64_t; +using pii = pair; +using pil = pair; +using pli = pair; +using pll = pair; + +#define read(x, type) type x; cin >> x; +#define readvec(a, n, type) vector a; for (int i = 0; i < (n); ++i) cin >> a[i]; + +#define lowbit(x) ((x) & -(x)) +#define popcount(x) (__builtin_popcountll(ll(x))) +#define parity(x) (__builtin_parityll(ll(x))) +#define msp(x) (63LL - __builtin_clzll(ll(x))) +#define lsp(x) (__builtin_ctzll(ll(x))) + +#define upair ull +#define umake(x, y) (ull(x) << 32 | ull(y)) +#define u1(p) ((p) >> 32) +#define u2(p) ((p) & ((1ULL << 32) - 1)) +#define ult std::less +#define ugt std::greater + +#define ipair ull +#define imake(x, y) (umake(x, y)) +#define i1(p) (int(u1(p))) +#define i2(p) (int(u2(p))) +struct ilt { + bool operator()(const ipair& a, const ipair& b) const { + if (i1(a) == i1(b)) return i2(a) < i2(b); + else return i1(a) < i1(b); + } +}; +struct igt { + bool operator()(const ipair& a, const ipair& b) const { + if (i1(a) == i1(b)) return i2(a) > i2(b); + else return i1(a) > i1(b); + } +};