Pagini recente » Cod sursa (job #1381929) | Cod sursa (job #1126150) | Cod sursa (job #1208053) | Cod sursa (job #2264056) | Cod sursa (job #235728)
Cod sursa(job #235728)
#include <stdio.h>
#define Nmax 100100
int t[Nmax][17],n,m;
inline int min(int a,int b)
{
if (a<b) return a;
return b;
}
#define DIM 10000
char buf[DIM];
int pozi;
int NR;
#define buff fread(buf,1,DIM,stdin),pozi=0
#define cit \
{\
NR=0;\
while (buf[pozi] < '0') if (++pozi == DIM) buff;\
while (buf[pozi] >='0')\
{\
NR = NR*10 + buf[pozi] - '0';\
if (++pozi == DIM) buff; \
}\
}
#define read(X) {cit X = NR;}
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
buff;
read(n) read(m)
for (int i=1;i<=n;++i)
read(t[i][0])
for (int j=1;(1<<j)<=n;++j)
for (int i=1;i<=n;++i) if (i+(1<<(j-1))<=n) t[i][j] = min(t[i][j-1],t[i+(1<<(j-1))][j-1]);
int x,y;
for (int i=1;i<=m;++i)
{
read(x) read(y)
for (int k=16;k>=0;--k) if(x+(1<<k)-1<=y)
{
printf("%d\n", min(t[x][k],t[y-(1<<k)+1][k]));
break;
}
}
return 0;
}