Pagini recente » Cod sursa (job #2914717) | Cod sursa (job #2886572) | Cod sursa (job #2572994) | Cod sursa (job #2073717) | Cod sursa (job #2289549)
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.PrintStream;
import java.util.Scanner;
public class Main {
public static final String IN_FILE = "arbint.in";
public static final String OUT_FILE = "arbint.out";
public static void main(String[] args) throws FileNotFoundException {
final Scanner scanner = new Scanner(new FileInputStream(IN_FILE));
final PrintStream writer = new PrintStream(OUT_FILE);
int n = scanner.nextInt();
int m = scanner.nextInt();
int arr[] = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = scanner.nextInt();
}
Tree tree = new Tree(arr);
for (int i = 0; i < m; i++) {
int x = scanner.nextInt();
int a = scanner.nextInt();
int b = scanner.nextInt();
if (x == 0) {
writer.println(tree.query(a, b, 1, n, 1));
} else {
tree.update(a, b, 1, n, 1);
}
}
}
static class Tree {
int arb[];
public Tree(int arr[]) {
arb = new int[arr.length * 4];
for (int i = 0; i < arr.length; ++i) {
update(i + 1, arr[i], 1, arr.length, 1);
}
}
void update(int pos, int val, int l, int r, int nod) {
if (r == l) {
arb[nod] = val;
return;
}
int m = (r + l) / 2;
if (pos <= m) update(pos, val, l, m, 2 * nod);
else update(pos, val, m + 1, r, 2 * nod + 1);
arb[nod] = Math.max(arb[nod * 2], arb[nod * 2 + 1]);
}
int query(int a, int b, int l, int r, int nod) {
if (a <= l && b >= r)
return arb[nod];
int m = (l + r) / 2;
int m1 = -1, m2 = -1;
if (a <= m) m1 = query(a, b, l, m, nod * 2);
if (b > m) m2 = query(a, b, m + 1, r, nod * 2 + 1);
return Math.max(m1, m2);
}
}
}