Pagini recente » Cod sursa (job #2368354) | Cod sursa (job #121136) | Cod sursa (job #1199143) | Monitorul de evaluare | Cod sursa (job #2602724)
import math
def input_get_int(fname):
with open(fname, 'rt') as fin:
for line in fin:
for val in line.split():
yield int(val)
class Range_minimum_query:
lookup = []
def __init__(self, arr):
self.lookup = [[0 for _ in range(int(math.log2(len(arr)) + 1))] for _ in range(len(arr))]
for i in range(len(arr)):
self.lookup[i][0] = arr[i]
for j in range(1, len(self.lookup[0])):
for i in range(len(self.lookup) - (1 << j) + 1):
self.lookup[i][j] = min(self.lookup[i][j - 1], self.lookup[i + (1 << j) // 2][j - 1])
def query(self, i, j):
lg = int(math.log2(j - i + 1))
return min(self.lookup[i][lg], self.lookup[j - (1 << lg) + 1][lg])
if __name__ == "__main__":
ig = input_get_int("rmq.in")
n, m = next(ig), next(ig)
a = [next(ig) for _ in range(n)]
rmq = Range_minimum_query(a)
with open("rmq.out", 'wt') as fout:
for _ in range(m):
fout.write('{}\n'.format(rmq.query(next(ig) - 1, next(ig) - 1)))