qwerty787788

ДО

May 24th, 2014
477
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.32 KB | None | 0 0
  1. class SegmentTree {
  2.         int[] a;
  3.         int n;
  4.  
  5.         SegmentTree(int[] b) {
  6.             n = b.length;
  7.             a = new int[n * 4];
  8.         init(0, 0, n - 1, b);
  9.         }
  10.  
  11.         int get(int v, int l, int r, int need) {
  12.             if (l == r)
  13.                 return a[v];
  14.             int m = (l + r) >> 1;
  15.             int val = a[v];
  16.             if (m >= need) {
  17.                 val = Math.min(val, get(v * 2 + 1, l, m, need));
  18.             } else {
  19.                 val = Math.min(val, get(v * 2 + 2, m + 1, r, need));
  20.             }
  21.             return val;
  22.         }
  23.  
  24.         void update(int v, int l, int r, int needL, int needR, int val) {
  25.             if (needL > needR)
  26.                 return;
  27.             if (l == needL && r == needR) {
  28.                 a[v] = Math.min(a[v], val);
  29.                 return;
  30.             }
  31.             int m = (l + r) >> 1;
  32.             update(v * 2 + 1, l, m, needL, Math.min(needR, m), val);
  33.             update(v * 2 + 2, m + 1, r, Math.max(needL, m + 1), needR, val);
  34.         }
  35.  
  36.         void init(int v, int l, int r, int[] val) {
  37.             if (l == r) {
  38.                 a[v] = val[l];
  39.             } else {
  40.                 int m = (l + r) >> 1;
  41.                 init(v * 2 + 1, l, m, val);
  42.                 init(v * 2 + 2, m + 1, r, val);
  43.             }
  44.         }
  45.     }
Advertisement
Add Comment
Please, Sign In to add comment