Untitled
unknown
plain_text
2 years ago
967 B
5
Indexable
struct ST { vpii t; int n; ST() {} ST(const vi& a) { n = a.size(); t.resize(4 * n); build(a); } pii combine(pii a, pii b) { if (a.ff >= b.ff) { return a; } return b; } void build(const vi& a, int v = 0, int l = 0, int r = -1) { if (r == -1) r = n; if (r - l == 1) { t[v] = {a[l], l}; return; } int m = l + (r - l) / 2; build(a, 2 * v + 1, l, m); build(a, 2 * v + 2, m, r); t[v] = combine(t[2 * v + 1], t[2 * v + 2]); } pii get(int ql, int qr, int v = 0, int l = 0, int r = -1) { if (r == -1) r = n; if (ql <= l && r <= qr) { return t[v]; } if (qr <= l || r <= ql) { return {-inf, -1}; } int m = l + (r - l) / 2; return combine(get(ql, qr, 2 * v + 1, l, m), get(ql, qr, 2 * v + 2, m, r)); } };
Editor is loading...