Pagini recente » Monitorul de evaluare | Cod sursa (job #2785590) | Cod sursa (job #83970) | Cod sursa (job #2616991) | Cod sursa (job #416210)
Cod sursa(job #416210)
//Range Minimum Query
#include <fstream>
using namespace std;
#define NMAX 100002
int M[NMAX][20];
int main()
{
ifstream fin("rmq.in"); ofstream fout("rmq.out");
int N,m,i,j,k;
fin>>N>>m;
for (i=1;i<=N;++i)
{
fin>>M[i][0];
}
for (j=1; (1<<j) <= N; ++j)
for (i=1; i+(1<<j)-1 <=N; ++i)
M[i][j]=min(M[i][j-1],M[i+(1<<(j-1))][j-1]);
while (m--)
{ int x,y;
fin>>x>>y;
k=0;
while ((1<<k)<=y-x+1) ++k;
--k;
fout<<min(M[x][k],M[y-(1<<k)+1][k])<<"\n";
}
fin.close(); fout.close();
return 0;
}