Pagini recente » Cod sursa (job #1778942) | Cod sursa (job #913546) | Cod sursa (job #1875350) | Cod sursa (job #2824686) | Cod sursa (job #2969958)
#include <fstream>
const int NMAX=100005;
const int LOGMAX=25;
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
void construct_rmq();
int query(int, int);
int l(int);
int n, m;
int rmq[LOGMAX][NMAX];
int main()
{
int i, a, b;
fin>>n>>m;
for(i=1; i<=n; i++) fin>>rmq[0][i];
construct_rmq();
for(i=1; i<=m; i++)
{
fin>>a>>b;
fout<<query(a, b)<<'\n';
}
}
void construct_rmq()
{
int i, j;
for(i=1; (1<<i)<=n; i++)
{
for(j=(1<<i); j<=n; j++)
{
rmq[i][j]=min(rmq[i-1][j], rmq[i-1][j-(1<<(i-1))]);
}
}
}
int query(int st, int dr)
{
int lg=l(dr-st+1);
return min(rmq[lg][st+(1<<lg)-1], rmq[lg][dr]);
}
int l(int nr)
{
int p=0;
while((1<<p)<=nr) p++;
return p-1;
}