Pagini recente » Cod sursa (job #3228345) | Cod sursa (job #2624554) | Cod sursa (job #1776350) | Cod sursa (job #2753725) | Cod sursa (job #1618697)
#include <iostream>
#include <fstream>
#include <math.h>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
const int Nmax = 400005;
int n, RMQ[20][Nmax], m, X[Nmax];
void Precalculate()
{
for(int i = 1; i <= n; i++)
{
RMQ[0][i] = X[i];
}
for(int i = 1; (1<<i) <= n; i++)
{
for(int j = 1; j <= n-(1<<i)+1; j++)
{
RMQ[i][j] = min(RMQ[i-1][j], RMQ[i-1][j+(1<<(i-1))]);
}
}
}
void Print()
{
while(m--)
{
int x,y;
f>>x>>y;
int k = y-x+1;
int l = log2(k);
g<<min(RMQ[l][x], RMQ[l][y-(1<<l)+1])<<'\n';
}
}
int main()
{
f>>n>>m;
for(int i = 1; i <= n; i++) f>>X[i];
Precalculate();
Print();
return 0;
}