public class FenwickTree {

	// T[i] += value
	public static void add(int[] t, int i, int value) {
		for (; i < t.length; i |= i + 1)
			t[i] += value;
	}

	// sum[0..i]
	public static int sum(int[] t, int i) {
		int res = 0;
		for (; i >= 0; i = (i & (i + 1)) - 1)
			res += t[i];
		return res;
	}

	///////////////////////////////////////////////////

	// T[i] = max(T[i], value)
	public static void set(int[] t, int i, int value) {
		for (; i < t.length; i |= i + 1)
			t[i] = Math.max(t[i], value);
	}

	// max[0..i]
	public static int max(int[] t, int i) {
		int res = Integer.MIN_VALUE;
		for (; i >= 0; i = (i & (i + 1)) - 1)
			res = Math.max(res, t[i]);
		return res;
	}

	// Usage example
	public static void main(String[] args) {
		int[] t = new int[10];
		add(t, 0, 1);
		add(t, 9, -2);
		System.out.println(-1 == sum(t, 9));
	}
}
