Pagini recente » Cod sursa (job #429325) | Cod sursa (job #2631307) | Cod sursa (job #2203788) | Cod sursa (job #700016) | Cod sursa (job #186365)
Cod sursa(job #186365)
#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();
freopen("rmq.out", "w", stdout);
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";
printf("%d\n", min ( rmq[lg[b-a+1]][a], rmq[lg[b-a+1]][b- ( 1<<lg[b-a+1])+1]));
}
return 0;
}