Pagini recente » Diferente pentru implica-te/arhiva-educationala intre reviziile 178 si 179 | Cod sursa (job #1136759) | Cod sursa (job #3279552) | Cod sursa (job #1136970) | Cod sursa (job #2639225)
//package ia;
import java.io.FileWriter;
import java.io.File;
import java.util.Scanner;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
try{
FileWriter fo = new FileWriter("arbint.out");
File f = new File("arbint.in");
Scanner fi = new Scanner(f);
int n = fi.nextInt();
int m = fi.nextInt();
Segment_Tree tree = new Segment_Tree(n);
for(int i = 1; i <= n; i++) {
int x = fi.nextInt();
tree.Update(i, x);
}
for(int i = 1; i <= m; i++) {
if(fi.nextInt() == 0)
fo.write(tree.Query(fi.nextInt(), fi.nextInt()) + "\n");
else
tree.Update(fi.nextInt(), fi.nextInt());
}
fo.close();
fi.close();
}
catch(IOException e) {}
}
}
class Segment_Tree{
private int size;
int[] aint;
public Segment_Tree(int _size){
size = _size;
aint = new int[1 + 4 * size];
}
private int pos, val;
private void update(int p, int st, int dr) {
if(st == dr)
aint[p] = val;
else {
int m = (st + dr) / 2;
if(pos <= m) update(2 * p, st, m);
else update(2 * p + 1, m + 1, dr);
aint[p] = Math.max(aint[2 * p], aint[2 * p + 1]);
}
}
private int left, right, ans;
private void query(int p, int st, int dr) {
if(left <= st && dr <= right)
ans = Math.max(ans, aint[p]);
else {
int m = (st + dr) / 2;
if(left <= m) query(2 * p, st, m);
if(m + 1 <= right) query(2 * p + 1, m + 1, dr);
}
}
public void Update(int _pos, int _val) {
pos = _pos;
val = _val;
update(1, 1, size);
}
public int Query(int _left, int _right) {
left = _left;
right = _right;
ans = 0;
query(1, 1, size);
return ans;
}
}