#include <bits/stdc++.h>
using namespace std;
struct SegmentTree {
int n;
vector<int> tree, lazy;
const int NO_UPDATE = numeric_limits<int>::max(); // Special marker
SegmentTree(int size) {
n = size;
tree.assign(4 * n, 0); // Default value can be changed
lazy.assign(4 * n, NO_UPDATE);
}
void push(int node, int l, int r) {
if (lazy[node] != NO_UPDATE) {
tree[node] = lazy[node];
if (l != r) { // propagate to children
lazy[node * 2] = lazy[node];
lazy[node * 2 + 1] = lazy[node];
}
lazy[node] = NO_UPDATE;
}
}
void rangeSet(int node, int l, int r, int ql, int qr, int val) {
push(node, l, r);
if (qr < l || r < ql) return;
if (ql <= l && r <= qr) {
lazy[node] = val;
push(node, l, r);
return;
}
int mid = (l + r) / 2;
rangeSet(node * 2, l, mid, ql, qr, val);
rangeSet(node * 2 + 1, mid + 1, r, ql, qr, val);
}
int pointQuery(int node, int l, int r, int idx) {
push(node, l, r);
if (l == r) return tree[node];
int mid = (l + r) / 2;
if (idx <= mid)
return pointQuery(node * 2, l, mid, idx);
else
return pointQuery(node * 2 + 1, mid + 1, r, idx);
}
// Public interfaces
void rangeSet(int l, int r, int val) {
rangeSet(1, 0, n - 1, l, r, val);
}
int pointQuery(int idx) {
return pointQuery(1, 0, n - 1, idx);
}
};
int main() {
SegmentTree st(10);
st.rangeSet(2, 5, 7); // set elements in range [2, 5] to 7
st.rangeSet(4, 9, 3); // set elements in range [4, 9] to 3
for (int i = 0; i < 10; ++i) {
printf("Index %d: %d\n", i, st.pointQuery(i));
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJ1Y3QgU2VnbWVudFRyZWUgewogICAgaW50IG47CiAgICB2ZWN0b3I8aW50PiB0cmVlLCBsYXp5OwogICAgY29uc3QgaW50IE5PX1VQREFURSA9IG51bWVyaWNfbGltaXRzPGludD46Om1heCgpOyAvLyBTcGVjaWFsIG1hcmtlcgoKICAgIFNlZ21lbnRUcmVlKGludCBzaXplKSB7CiAgICAgICAgbiA9IHNpemU7CiAgICAgICAgdHJlZS5hc3NpZ24oNCAqIG4sIDApOyAgICAgICAvLyBEZWZhdWx0IHZhbHVlIGNhbiBiZSBjaGFuZ2VkCiAgICAgICAgbGF6eS5hc3NpZ24oNCAqIG4sIE5PX1VQREFURSk7CiAgICB9CgogICAgdm9pZCBwdXNoKGludCBub2RlLCBpbnQgbCwgaW50IHIpIHsKICAgICAgICBpZiAobGF6eVtub2RlXSAhPSBOT19VUERBVEUpIHsKICAgICAgICAgICAgdHJlZVtub2RlXSA9IGxhenlbbm9kZV07CiAgICAgICAgICAgIGlmIChsICE9IHIpIHsgLy8gcHJvcGFnYXRlIHRvIGNoaWxkcmVuCiAgICAgICAgICAgICAgICBsYXp5W25vZGUgKiAyXSA9IGxhenlbbm9kZV07CiAgICAgICAgICAgICAgICBsYXp5W25vZGUgKiAyICsgMV0gPSBsYXp5W25vZGVdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGxhenlbbm9kZV0gPSBOT19VUERBVEU7CiAgICAgICAgfQogICAgfQoKICAgIHZvaWQgcmFuZ2VTZXQoaW50IG5vZGUsIGludCBsLCBpbnQgciwgaW50IHFsLCBpbnQgcXIsIGludCB2YWwpIHsKICAgICAgICBwdXNoKG5vZGUsIGwsIHIpOwogICAgICAgIGlmIChxciA8IGwgfHwgciA8IHFsKSByZXR1cm47CiAgICAgICAgaWYgKHFsIDw9IGwgJiYgciA8PSBxcikgewogICAgICAgICAgICBsYXp5W25vZGVdID0gdmFsOwogICAgICAgICAgICBwdXNoKG5vZGUsIGwsIHIpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGludCBtaWQgPSAobCArIHIpIC8gMjsKICAgICAgICByYW5nZVNldChub2RlICogMiwgbCwgbWlkLCBxbCwgcXIsIHZhbCk7CiAgICAgICAgcmFuZ2VTZXQobm9kZSAqIDIgKyAxLCBtaWQgKyAxLCByLCBxbCwgcXIsIHZhbCk7CiAgICB9CgogICAgaW50IHBvaW50UXVlcnkoaW50IG5vZGUsIGludCBsLCBpbnQgciwgaW50IGlkeCkgewogICAgICAgIHB1c2gobm9kZSwgbCwgcik7CiAgICAgICAgaWYgKGwgPT0gcikgcmV0dXJuIHRyZWVbbm9kZV07CiAgICAgICAgaW50IG1pZCA9IChsICsgcikgLyAyOwogICAgICAgIGlmIChpZHggPD0gbWlkKQogICAgICAgICAgICByZXR1cm4gcG9pbnRRdWVyeShub2RlICogMiwgbCwgbWlkLCBpZHgpOwogICAgICAgIGVsc2UKICAgICAgICAgICAgcmV0dXJuIHBvaW50UXVlcnkobm9kZSAqIDIgKyAxLCBtaWQgKyAxLCByLCBpZHgpOwogICAgfQoKICAgIC8vIFB1YmxpYyBpbnRlcmZhY2VzCiAgICB2b2lkIHJhbmdlU2V0KGludCBsLCBpbnQgciwgaW50IHZhbCkgewogICAgICAgIHJhbmdlU2V0KDEsIDAsIG4gLSAxLCBsLCByLCB2YWwpOwogICAgfQoKICAgIGludCBwb2ludFF1ZXJ5KGludCBpZHgpIHsKICAgICAgICByZXR1cm4gcG9pbnRRdWVyeSgxLCAwLCBuIC0gMSwgaWR4KTsKICAgIH0KfTsKCgppbnQgbWFpbigpIHsKICAgIFNlZ21lbnRUcmVlIHN0KDEwKTsKCiAgICBzdC5yYW5nZVNldCgyLCA1LCA3KTsgICAgIC8vIHNldCBlbGVtZW50cyBpbiByYW5nZSBbMiwgNV0gdG8gNwogICAgc3QucmFuZ2VTZXQoNCwgOSwgMyk7ICAgICAvLyBzZXQgZWxlbWVudHMgaW4gcmFuZ2UgWzQsIDldIHRvIDMKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwOyArK2kpIHsKICAgICAgICBwcmludGYoIkluZGV4ICVkOiAlZFxuIiwgaSwgc3QucG9pbnRRdWVyeShpKSk7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0=