Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class SegmentTree {
- int[] a;
- int n;
- SegmentTree(int[] b) {
- n = b.length;
- a = new int[n * 4];
- init(0, 0, n - 1, b);
- }
- int get(int v, int l, int r, int need) {
- if (l == r)
- return a[v];
- int m = (l + r) >> 1;
- int val = a[v];
- if (m >= need) {
- val = Math.min(val, get(v * 2 + 1, l, m, need));
- } else {
- val = Math.min(val, get(v * 2 + 2, m + 1, r, need));
- }
- return val;
- }
- void update(int v, int l, int r, int needL, int needR, int val) {
- if (needL > needR)
- return;
- if (l == needL && r == needR) {
- a[v] = Math.min(a[v], val);
- return;
- }
- int m = (l + r) >> 1;
- update(v * 2 + 1, l, m, needL, Math.min(needR, m), val);
- update(v * 2 + 2, m + 1, r, Math.max(needL, m + 1), needR, val);
- }
- void init(int v, int l, int r, int[] val) {
- if (l == r) {
- a[v] = val[l];
- } else {
- int m = (l + r) >> 1;
- init(v * 2 + 1, l, m, val);
- init(v * 2 + 2, m + 1, r, val);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment