Pagini recente » Borderou de evaluare (job #2206900) | Borderou de evaluare (job #2174291) | Borderou de evaluare (job #2753308) | Diferente pentru utilizator/gabor_oliviu1991 intre reviziile 29 si 10 | Cod sursa (job #3003377)
#include <bits/stdc++.h>
#define MAX 100000
#define FILES freopen("rmq.in","r",stdin);\
freopen("rmq.out","w",stdout);
#define mod 666013
using namespace std;
int n, m, v[MAX + 5], rmq[MAX + 5][18];
int a, b;
int getMin(int a, int b)
{
int d = b - a + 1, p = 1, e = 0;
while(p * 2 < d)
p *= 2, e++;
int mn = min(a, b), mx = max(a, b);
return min(rmq[mn][e], rmq[mx - p + 1][e]);
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
FILES
std::cin >> n >> m;
for(int i = 1;i <= n; ++i)
std::cin >> v[i], rmq[i][0] = v[i];
int p = log2(n), sz = n;
for(int i = 1;i <= p; ++i)
{
sz -= (1 << (i - 1));
for(int j = 1;j <= sz; ++j)
rmq[j][i] = min(rmq[j][i - 1], rmq[j + (1 << (i - 1))][i - 1]);
}
for(int i = 1;i <= m; ++i)
{
std::cin >> a >> b;
std::cout << getMin(a, b) << '\n';
}
}