Pagini recente » Borderou de evaluare (job #565599) | Cod sursa (job #514163) | Cod sursa (job #739793) | Cod sursa (job #2943193) | Cod sursa (job #2998432)
#include<fstream>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int n , m , i , k , j , mat[33][100005] , v[100005] , x , y;
int querry (int a , int b)
{
if (a > b)
swap (a , b);
int k = 0;
while ((1 << k) <= (b - a + 1))
k++;
k--;
return min (mat[k][a] , mat[k][b - (1 << k) + 1]);
}
int main()
{
f >> n >> m;
for (int i = 1 ; i <= n ; i++)
{
f >> v[i];
}
int k = 1;
while ((1 << k) <= n)
k++;
k--;
for (int i = 1 ; i <= n ; i++)
mat[0][i] = v[i];
for (int i = 1 ; i <= k ; i++)
{
for (int j = 1 ; j + (1 << (i - 1)) <= n ; j++)
mat[i][j] = min (mat[i - 1][j] , mat[i - 1][j + (1 << (i - 1))]);
}
for (int i = 1 ; i <= m ; i++)
{
f >> x >> y;
g << querry (x , y) << '\n';
}
return 0;
}