Pagini recente » Cod sursa (job #2986189) | Cod sursa (job #73580) | Cod sursa (job #1296373) | Cod sursa (job #1138013) | Cod sursa (job #1054997)
#include <fstream>
#include <algorithm>
#define nmax 100000+5
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int R[20][nmax];
int v[nmax];
int n;
void formareMatrice()
{
int i, j;
for (j = 1; j <= n; j++)
R[0][j] = v[j];
for (i = 1; (1 << i) <= n; i++)
for (j = 1; j + (1 << i) - 1 <= n; j++)
R[i][j] = min(R[i-1][j], R[i-1][j+(1<<(i-1))]);
}
int interogare(int x, int y)
{
int log = 0;
while ((1 << (log+1))<=y-x)
log++;
return min(R[log][x], R[log][y-(1<<log)+1]);
}
int main()
{
int i;
int m;
int x, y;
fin >> n >> m;
for (i = 1; i <= n; i++)
fin >> v[i];
formareMatrice();
for (i = 1; i <= m; i++)
{
fin >> x >> y;
fout << interogare(x, y) << '\n';
}
return 0;
}