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]); }
// max[a, b]
public static int max(int[] t, int a, int b) {
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)); }
}
IGNsYXNzIFNlZ21lbnRUcmVlU2ltcGxlIHsKCiAgcHVibGljIHN0YXRpYyBpbnQgZ2V0KGludFtdIHQsIGludCBpKSB7CiAgICByZXR1cm4gdFtpICsgdC5sZW5ndGggLyAyXTsKICB9CgogIHB1YmxpYyBzdGF0aWMgdm9pZCBhZGQoaW50W10gdCwgaW50IGksIGludCB2YWx1ZSkgewogICAgaSArPSB0Lmxlbmd0aCAvIDI7CiAgICB0W2ldICs9IHZhbHVlOwogICAgZm9yICg7IGkgPiAxOyBpID4+PSAxKQogICAgICB0W2kgPj4gMV0gPSBNYXRoLm1heCh0W2ldLCB0W2kgXiAxXSk7CiAgfQoKICAvLyBtYXhbYSwgYl0KICBwdWJsaWMgc3RhdGljIGludCBtYXgoaW50W10gdCwgaW50IGEsIGludCBiKSB7CiAgICBpbnQgcmVzID0gSW50ZWdlci5NSU5fVkFMVUU7CiAgICBmb3IgKGEgKz0gdC5sZW5ndGggLyAyLCBiICs9IHQubGVuZ3RoIC8gMjsgYSA8PSBiOyBhID0gKGEgKyAxKSA+PiAxLCBiID0gKGIgLSAxKSA+PiAxKSB7CiAgICAgIGlmICgoYSAmIDEpICE9IDApCiAgICAgICAgcmVzID0gTWF0aC5tYXgocmVzLCB0W2FdKTsKICAgICAgaWYgKChiICYgMSkgPT0gMCkKICAgICAgICByZXMgPSBNYXRoLm1heChyZXMsIHRbYl0pOwogICAgfQogICAgcmV0dXJuIHJlczsKICB9CgogIC8vIFVzYWdlIGV4YW1wbGUKICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICBpbnQgbiA9IDEwOwogICAgaW50W10gdCA9IG5ldyBpbnRbbiArIG5dOwogICAgYWRkKHQsIDAsIDEpOwogICAgYWRkKHQsIDksIDIpOwogICAgU3lzdGVtLm91dC5wcmludGxuKDIgPT0gbWF4KHQsIDAsIDkpKTsKICB9Cn0=