Pagini recente » Cod sursa (job #1593511) | Cod sursa (job #1394114) | Cod sursa (job #1461740) | Cod sursa (job #3201231) | Cod sursa (job #1654724)
// Range Minimum Query.cpp : Defines the entry point for the console application.
//
//#include "stdafx.h"
#include <fstream>
#include <cmath>
#define NMAX 100100
#define LogMAX 20
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n, m, i, x, y;
int _rmq[NMAX][LogMAX];
int min(int a,int b)
{
return a < b ? a : b;
}
void CreateMatrix()
{
int LogMx = log2(n);
for (int j = 1; j <= LogMx; j++)
{
x = (1 << j);
for (i = 1; i + x -1 <= n; i++)
_rmq[i][j] = min(_rmq[i][j - 1], _rmq[i + x / 2 ][j - 1]);
}
}
int rmq(int in,int sf)
{
int diff = sf - in + 1;
int lg = log2(diff);
return min(_rmq[in][lg], _rmq[sf - (1<<lg) +1 ][lg]);
}
int main()
{
fin >> n;
fin >> m;
for (i = 1; i <= n; i++)
fin >> _rmq[i][0];
CreateMatrix();
for (i = 1; i <= m; i++)
{
fin >> x >> y;
fout << rmq(x, y) << '\n';
}
return 0;
}