Pagini recente » Cod sursa (job #1380351) | Cod sursa (job #2186440) | Cod sursa (job #2100292) | Cod sursa (job #2454513) | Cod sursa (job #235726)
Cod sursa(job #235726)
#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)
int ret=123456789;
for (int k=15;k>=0;--k) if(x+(1<<k)-1<=y)
{
ret = min(ret,t[x][k]);
x += (1<<k);
}
printf("%d\n", ret);
}
return 0;
}