Pagini recente » Cod sursa (job #922687) | Cod sursa (job #315750) | Cod sursa (job #2623152) | Cod sursa (job #2042706) | Cod sursa (job #303111)
Cod sursa(job #303111)
#include <cstdio>
using namespace std;
#define Nmax 101000
#define FIN "rmq.in"
#define FOUT "rmq.out"
#define Nmin 21
int c[Nmin][Nmax];
int n,m;
int x,y;
int log[Nmax];
inline int min(int a, int b)
{
if (a>b) return b;
return a;
}
void citire()
{
int i;
freopen(FIN,"r",stdin);
freopen(FOUT,"w",stdout);
scanf("%d %d", &n,&m);
for (i=1;i<=n;++i)
scanf("%d", &c[0][i]);
}
void solve()
{
int i,l,s;
log[0]=1;
for (i=2;i<=n;++i)
log[i]=log[i/2]+1;
for (s=1,l=1;l<=n;++s,l<<=1)
for (i=1;i<=n;++i)
c[s][i]=min(c[s-1][i],c[s-1][i+l]);
}
void scrie()
{
int i;
for (i=1;i<=m;++i)
{
scanf("%d %d", &x,&y);
printf("%d\n", min(c[log[y-x+1]][x],c[log[y-x+1]][y-(1<<log[y-x+1])+1]));
}
}
int main()
{
citire();
solve();
scrie();
fclose(stdin);
fclose(stdout);
return 0;
}