Pagini recente » Cod sursa (job #1850007) | Cod sursa (job #668532) | Cod sursa (job #2158468) | Cod sursa (job #297953) | Cod sursa (job #186364)
Cod sursa(job #186364)
#include <fstream>
using namespace std;
inline int min ( int &a, int &b)
{
return a < b ? a : b;
}
#define MAX 100005
#define LGMAX 18
int rmq[LGMAX][MAX], lg[MAX], N,M;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
void precalc()
{
lg[1] = 0;
for (int i = 2; i<=N; i++)
lg[i] = lg[i/2] + 1;
for ( int stp = 1; stp <= lg[N]; stp++)
for (int i = 1; i<=N; i++)
rmq[stp][i] = min( rmq[stp-1][i], rmq[stp-1][i + (1<<(stp-1))]);
}
int main()
{
fin>>N>>M;
for ( int i = 1; i<=N; i++)
fin>>rmq[0][i];
precalc();
for ( ; M>0; M--)
{
int a,b;
fin>>a>>b;
fout<<min ( rmq[lg[b-a+1]][a], rmq[lg[b-a+1]][b- ( 1<<lg[b-a+1])+1])<<"\n";
}
return 0;
}