Pagini recente » Cod sursa (job #1837598) | Cod sursa (job #1300746) | Cod sursa (job #1022589) | Cod sursa (job #2354530) | Cod sursa (job #2374076)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
const int NMAX = 100002;
int N,M;
int rmq[20][NMAX];
int lg[NMAX];
void Read()
{
fin>>N>>M;
for(int i=1;i<=N;++i)
fin>>rmq[0][i];
}
int x,y;
void RMQ()
{
lg[2]=1;
for(int i=3;i<=NMAX-2;++i)
lg[i]=lg[i/2]+1;
for(int i=1; ( 1 << i) <= N; ++i)
for(int j=1; j + ( 1 << i ) - 1 <= N ; ++j)
{
rmq[i][j] = min ( rmq[i-1][j] , rmq[i-1][j + ( 1 << (i-1) )]);
}
/*for(int i=0; ( 1 << i) <= N; ++i){
for(int j=1; j + ( 1 << i ) - 1 <= N ; ++j)
fout<<rmq[i][j]<<" ";
fout<<"\n";}*/
for(int i = 1; i <= M; ++i)
{
fin >> x >> y;
int L=(y-x)+1;
fout << min(rmq[lg[L]][x], rmq[lg[L]][y - ( 1 << lg[L] ) + 1])<<"\n";
}
}
int main()
{
Read();
RMQ();
return 0;
}