Pagini recente » Cod sursa (job #2944747) | Cod sursa (job #1742719) | Cod sursa (job #151211) | Cod sursa (job #2970813) | Cod sursa (job #526037)
Cod sursa(job #526037)
#include <algorithm>
using namespace std;
#define DIM 100005
#define LOG 20
int rmq[LOG][DIM];
int lg[DIM];
int n,m;
void read ()
{
int i;
scanf ("%d%d",&n,&m);
for (i=1; i<=n; ++i)
scanf ("%d",&rmq[0][i]);
}
void solve ()
{
int i,step;
for (i=2; i<=n; ++i)
lg[i]=lg[i>>1]+1;
for (step=1; 1<<(step-1)<n; ++step)
for (i=1; i+(1<<step)-1<=n; ++i)
rmq[step][i]=min (rmq[step-1][i],rmq[step-1][i+(1<<(step-1))]);
}
inline int get_min (int a,int b)
{
int step;
step=lg[b-a+1];
return min (rmq[step][a],rmq[step][b-(1<<step)+1]);
}
void print ()
{
int i,a,b;
for (i=1; i<=m; ++i)
{
scanf ("%d%d",&a,&b);
printf ("%d\n",get_min (a,b));
}
}
int main ()
{
freopen ("rmq.in","r",stdin);
freopen ("rmq.out","w",stdout);
read ();
solve ();
print ();
return 0;
}