Pagini recente » Cod sursa (job #2186954) | Cod sursa (job #2186928) | Cod sursa (job #3288231) | Cod sursa (job #3037893) | Cod sursa (job #2885996)
#include <bits/stdc++.h>
using namespace std;
int const N = 1e5 + 1;
int v[N];
int rmq[20][N], logg[N];
void rq (int n)
{
for(int i = 0 ; i <= logg[n] ; i++)
{
for(int j = 1 ; j <= n ; j++)
{
if (!i)
rmq[i][j] = v[j];
else if (j - (1 << (i - 1)) > 0)
rmq[i][j] = min (rmq[i - 1][j - (1 << (i - 1))], rmq[i - 1][j]);
}
}
return;
}
int main()
{
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int n, m;
cin >> n >> m;
for(int i = 1 ; i <= n ; i++)
{
cin >> v[i];
}
logg[1] = 0;
for(int i = 2 ; i <= n ; ++ i)
{
logg[i] = 1 + logg[i / 2];
}
rq(n);
for(int i = 1 ; i <= m ; i++)
{
int a, b;
cin >> a >> b;
int l = logg[1 + b - a];
if (a == b)
{
cout << v[a];
}
else
cout << min (rmq[l][a + (1 << l) - 1], rmq[l][b]);
cout << '\n';
}
return 0;
}