Pagini recente » Cod sursa (job #167768) | Cod sursa (job #1919150) | Cod sursa (job #311961) | Cod sursa (job #532830) | Cod sursa (job #2658764)
import math
fin = open("arbint.in", "r")
sir = fin.read()
sir += "##"
def readNum():
x = 0
if sir[readNum.point] == "#":
return 0
while(sir[readNum.point] >= '0' and sir[readNum.point] <= '9'):
x = x * 10 + int(sir[readNum.point])
readNum.point += 1;
readNum.point += 1;
return x
readNum.point = 0;
n = readNum()
m = readNum()
vect = []
for i in range(n):
nr = readNum()
vect.append(nr)
tree = [0]*262144
baza = 1 << int(math.ceil(math.log2(n)))
for i in range(n):
tree[baza+i] = vect[i];
for k in range(int(math.log2(baza))-1, -1, -1):
for i in range(1<<k, 1<<k+1):
tree[i] = max(tree[i*2], tree[i*2+1])
def update(poz, val):
poz += baza-1
tree[poz] = val
poz //= 2
while poz > 0:
tree[poz] = max(tree[poz*2], tree[poz*2+1])
poz //= 2
def query(a, b):
a += baza-1
b += baza-1
rez = 0
while a <= b:
if a % 2 == 1:
rez = max(rez, tree[a])
a += 1
if b % 2 == 0:
rez = max(rez, tree[b])
b -= 1
a //= 2
b //= 2
return rez
fout = open("arbint.out", "w")
while m > 0:
m -= 1
c = readNum()
a = readNum()
b = readNum()
if c == 0:
fout.write(str(query(a, b))+"\n")
else:
update(a, b)