public class SegmentTreeSimple { public static int get(int[] t, int i) { return t[i + t.length / 2]; } public static void add(int[] t, int i, int value) { i += t.length / 2; t[i] += value; for (; i > 1; i >>= 1) t[i >> 1] = Math.max(t[i], t[i ^ 1]); } public static int max(int[] t, int a, int b) { int res = Integer.MIN_VALUE; for (a += t.length / 2, b += t.length / 2; a <= b; a = (a + 1) >> 1, b = (b - 1) >> 1) { if ((a & 1) != 0) res = Math.max(res, t[a]); if ((b & 1) == 0) res = Math.max(res, t[b]); } return res; } // Usage example public static void main(String[] args) { int n = 10; int[] t = new int[n + n]; add(t, 0, 1); add(t, 9, 2); System.out.println(2 == max(t, 0, 9)); } }