Pagini recente » Cod sursa (job #375284) | Cod sursa (job #716313) | Cod sursa (job #2134527) | Cod sursa (job #1562906) | Cod sursa (job #1393718)
#include <fstream>
#define DMAX 100004
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n, m;
int A[DMAX], log[DMAX];
int rmq[DMAX][20];
void citire();
void RMQ();
void logaritm();
void query();
int main()
{
citire();
RMQ();
logaritm();
query();
return 0;
}
void citire()
{
int i;
fin>>n>>m;
for(i=1;i<=n;++i)
{
fin>>A[i];
rmq[i][0]=A[i];
}
}
void RMQ()
{
int i, j, L;
for(j=1;(1<<j)<=n;++j)
for(i=1;i<=n-(1<<j)+1;++i)
{
L=(1<<(j-1));
rmq[i][j]=min(rmq[i][j-1], rmq[i+L][j-1]);
}
}
void logaritm()
{
int i;
for(i=2;i<=n;++i)
log[i]=log[i/2]+1;
}
void query()
{
int i, x, y, aux, dif, L, l;
for(i=1;i<=m;++i)
{
fin>>x>>y;
if(y<x) { aux=x; x=y; y=aux; }
dif=y-x+1;
L=log[dif];
l=dif-(1<<L);
fout<<min(rmq[x][L], rmq[x+l][L])<<'\n';
}
}