Pagini recente » Cod sursa (job #3143580) | Cod sursa (job #1069823) | Cod sursa (job #3205739) | Cod sursa (job #2256847) | Cod sursa (job #2449220)
#!/usr/bin/env python3
import sys
sys.stdout = open('rmq.out', 'w')
with open('rmq.in', 'r') as f:
readInts = lambda: map(int, f.readline().split())
N, M = tuple(readInts())
A = [int(f.readline()) for _ in range(N)]
LOG = 0
while 1 << LOG < N: LOG += 1
RMQ = [[i] * LOG for i in range(N)]
for j in range(1, LOG + 1):
for i in range(N):
jPow = 1 << (j - 1)
if i + jPow * 2 > N: break
RMQ[i][j] = min(RMQ[i][j-1], RMQ[i + jPow][j-1])
def findMin(l, r):
logDiff = 0
while 1 << logDiff <= l - r + 1: logDiff += 1
return min(A[RMQ[l][logDiff]], A[RMQ[r - (1 << logDiff) + 1][logDiff]])
for _ in range(M):
l, r = tuple(readInts())
print(findMin(l - 1, r - 1))