Untitled
unknown
plain_text
3 years ago
967 B
9
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...